몇년 전, 어떤 나라의 교통국에서 자국의 교통망 시뮬레이션을 위한 프로그램을 만들었습니다. 물론 그들이 직접 만든 것은 아니고 IT강국인 한국의 한 SI업체에 외주를 맡긴 것이죠. 결과적으로 그들의 선택은 아주 훌륭한 것이었습니다. 수퍼 개발자가 넘쳐나는 대한민국의 SI업체인 만큼 기간내에 완벽한 시뮬레이션 프로그램을 만들어서 납품했기 때문이죠. 올해 봄, 이 회사의 신입 개발자로 채용되게 된 브래드는 얼마 전 부터 이 교통 시뮬레이션 프로젝트의 유지보수 업무를 맡고 있습니다. 뛰어난 선배들이 워낙 완벽하게 만들어 둔 프로젝트이기 때문에 브래드의 업무는 그저 기존의 코드를 보고 프로젝트 구조를 이해하는 정도에 불과합니다. 브래드는 이 시뮬레이션에서 핵심이 되는 Vehicle 객체의 구조를 다음 그림과 같..
문자열은 웹개발에서 가장 중요한 요소 중 하나이고 코딩테스트에서 단골로 출제되는 알고리즘이 Dynamic Programming(동적계획법)이기 때문에 가끔씩 DP를 사용하는 문자열 문제가 출제될 때가 있습니다. 어떤 문제든지 패턴을 파악하고 있으면 조금 더 쉽게 풀 수 있습니다. 오늘은 DP를 사용하면 문자열 문제 몇 개를 살펴보도록 하겠습니다. 가장 많이 출제되는 유형의 문제는 두 문자열에서 공통되는 문자의 개수를 찾아내거나 공통되는 문자열의 길이를 구하는 종류의 문제입니다. 예를 들어 "XMJYAUZ”, “MZJAWXU” 두 문자열에서 공통된 글자의 수를 찾아내려고 할 때, 위와 같은 테이블을 만들 수 있을 것입니다. 표에서 인덱스는 각각 하나의 문자를 나타내고 만약 해당하는 인덱스의 문자열이 같은 ..
마르코프 체인은 이미 자연어 처리와 관련된 분야에서는 한물간(?) 취급을 받고 있는 알고리즘인 것 같습니다. 그러나 관련 분야 전문가가 아닌 저와 같은 사람이 코딩을 통해 문장을 생성하는 가장 직관적이고 쉬운 알고리즘이라는 생각이 듭니다. 위 그림은 마르코프 체인을 설명할 때 가장 많이 볼 수 있는 그림인데 알파벳은 상태를, 화살표는 상태의 시간적 흐름을 숫자는 상태 전이가 일어날 확률을 보여주고 있습니다. 쉽게 말해 A 에서 B 가 될 확률은 0.5, 그 반대는 0.8 이라는 것이죠. 이것을 통해서 무엇을 할 수 있을까요? 어떤 상태의 패턴을 추론할 수 있습니다. 가령 날씨를 예로 들자면 '흐림 > 비 > 맑음 > 흐림 > 비 > 맑음' 과 같은 패턴을 가지고 있다면 이 데이터를 통해 각각의 날씨에서 ..
대부분의 현대 애플리케이션들은 위 그림처럼, 소위 프론트엔드라고 부르는 클라이언트와 백엔드라고 부르는 서버가 상호간 데이터를 주고 받는 형태의 아키텍쳐를 가지고 있습니다. 이렇게 서버와 클라이언트가 분리되는 구조의 가장 큰 특징 중 하나는 서버와 클라이언트가 독립적으로 진화할 수 있다는 것입니다. 독립적으로 진화한다는 뜻은 각각의 업데이트 내용이 서로에게 영향을 끼치지 않는 다는 것입니다. 즉, 서버의 기능이 변경되어도 클라이언트는 업데이트 할 필요가 없고 그 반대 역시 마찬가지 입니다. 가장 대표적인 예시는 웹(Web) 입니다. 웹 페이지가 변경되었다고 해서 웹 브라우저를 업데이트 할 필요도 없으며, 웹 브라우저가 업데이트 됐다고 해서 웹 페이지를 변경할 필요도 없습니다. HTTP 명세가 변경되거나, ..
이전에 서블릿 보안과 관련된 포스트(링크)를 작성했던 적이 있습니다. 서블릿 기반의 웹 애플리케이션에서 인증과 인가 과정을 간단하게 설명했습니다. 스프링에서는 마찬가지로 이런 인증과 권한등 보안에 관한 기능을 제공하는 프레임워크인 스프링 시큐리티(Spring Security)가 있습니다. 스프링 시큐리티는 보안과 관련되어 수행해야 하는 다양한 작업들을 지원해 줍니다. 하지만 저와 같은 신입 개발자들이 스프링 시큐리티와 같은 보안기술을 이해하는 것은 쉬운 일이 아닌 것 같습니다. 여전히 모르는 것이 더 많고 어렵게 느껴지는 부분이지만, 최근 진행한 팀 프로젝트에서 스프링 시큐리티와 관련된 기술을 쓰며 알게된 사실들과 코드를 포스팅해 보려고 합니다. 인증(Authentication)과 권한(Authoriza..
IPv4 는 32비트로 구성된 프로토콜입니다. 32비트로 표현할 수 있는 IP 주소는 대략 42억개 정도로 이미 공인 IP는 2011년 부터 고갈되어 아주 제한적으로 할당이 이루어지고 있습니다. 그러나 인터넷이 연결된 개인용 컴퓨터와 모바일 디바이스는 끊임없이 늘어나고 있습니다. 당연히 존재하는 공인 IP만으로 이 모든 장치들을 커버하는 것은 불가능 한 일입니다. 사설 IP 사설IP는 부족한 공인 IP 숫자를 보완하기 위한 하나의 수단이 될 수 있습니다. 인터넷 서비스 제공자(ISP, Internet Service Provider)가 부여하는 공인 IP는 외부 인터넷망과 연결된 라우터(공유기)에 부여되고 라우터(공유기)에 연결된 내부 네트워크의 디바이스들은 내부 네트워크에서만 사용되는 가상의 IP주소를 ..
String 은 웹개발을 할 때 가장 많이 사용하는 자료형입니다. 그러다보니 실무에서는 String 객체를 잘 알고 활용하는 것이 중요합니다. 그런데 생각보다 String 객체를 잘 못 사용해서 생기는 버그가 많습니다. 오늘은 간단하게 String 객체를 비교할 때 주의해야 할 점 세 가지를 알아 보도록 하겠습니다. String class 의 method 를 소개한 포스트가 있으니(링크) 참고하시면 좋을 것 같습니다. 1. '==' vs equals() String 자료형을 선언하는 방법은 크게 두 가지가 있습니다. 하나는 리터럴 문자열 값을 대입하는 것이고 하나는 new 키워드를 사용해 String 객체를 직접 생성하는 방법입니다. 그런데 두 값을 '==' 연산을 통해 비교하면 같은 문자열을 저장하고 ..
지난주 한 회사의 면접에서 다음과 같은 질문과 답변을 주고 받았습니다. 면접관 : 추상 클래스와 인터페이스의 차이에 대해서 설명해 보세요. 나 : 네, 추상 클래스는 추상 메소드를 가진 클래스이고 인터페이스는 추상 메소드로만 이루어져 있는 것입니다. 면접관 : 다른 차이점은 없나요? 나 : (당황) 어... 제가 실무에서는 거의 인터페이스만 사용해 봐서... 잘 모르겠습니다. 면접관 : (실망한 표정) 네, 알겠습니다. 집에 돌아오며 생각해 보니 제가 알고 있는 것만으로도 그 자리에서 몇가지 대답을 더 할 수 있었을텐데 당황하는 바람에 제대로 답변을 못 한 부분이 아쉬웠습니다. 만약 다른 면접장에서 비슷한 질문을 받게 된다면 더 잘 대답하기 위해 추상클래스와 인터페이스의 차이에 대해 기록해 두려고 합니다..
- Total
- Today
- Yesterday
- java
- 마르코프
- 문장 생성기
- DP
- 클린코드
- REST API
- 유지보수
- markov chain
- Markov
- html
- 코딩의 기술
- 로그
- CONVENTIONS
- 경고
- GROUP BY
- 크롬
- RESTful
- 마르코프 연쇄
- 자바스크립트 개론
- 동적계획법
- 야근
- 자바스크립트개론
- 전략패턴
- was
- 몰라서망신
- 디자인패턴
- Spring in Action
- restful api
- Warning
- Count
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |