프로그래밍 175

[Servlet] 웹서버 vs 애플리케이션 서버 vs 서블릿 컨테이너 - Tomcat 은 서블릿 컨테이너일까?

다음의 포스팅을 번역 정리한 내용인데, 조금 예전 글이라 EJB에 대한 언급이 많지만 개념을 확립하는데 도움이 되기 때문에 정리해보았다. https://www.java67.com/2016/06/3-difference-between-web-server-vs-application-server-vs-servlet-container.html 웹 서버 vs 애플리케이션 서버 vs 서블릿 컨테이너 웹 서버, 애플리케이션 서버, 웹 컨테이너 라는 3가지 용어를 혼용해서 사용하는데 사실은 제각기 다른 것이다. 웹 서버는 정적인 페이지(HTML, CSS)를 제공하는 서버를 의미한다. 애플리케이션 서버는 서버 사이드 코드를 이용하여 동적인 컨텐츠를 만드는 서버를 의미한다. 톰캣은 정확히 말하면 애플리케이션 서버가 아니라 ..

[디자인패턴] 옵저버 패턴 (Observer Pattern) 아주 간단하게 정리해보기

옵저버 패턴이란? 옵저버란 스타크래프트 프로토스의 유닛으로 적들을 관찰하기 위해 탄생한 유닛이다. 테란전에서 필수 유닛이며 옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. 라고 위키에 쓰여 있다. 아주 간단히 얘기하자면 어떤 객체의 상태가 변할 때 그와 연관된 객체 들에게 알림을 보내는 디자인 패턴이 옵저버 패턴이라고 할 수 있다. 아주 간단한 예시를 통해 구현해 보자. 크루(학생)들은 코치가 하는 일들을 모두 notify(알..

[회고] 2019 상반기 회고

어쩌면 조금 늦은 듯한 상반기 회고. 앞으로 나아가는 것도 중요하지만 지난 일들을 되돌아보고 간단하게 나마 정리하는 것이 앞으로 나아갈 길을 비춰줄 수 있지 않을까 생각이 들어 반기 회고를 시작해 보려고 한다. Main Issue 졸업 2019년 8월, 긴 학교 생활을 마무리했다. 2013년 처음 입학 하던 날, C 언어를 배웠고 (배웠다기 보다 거의 끌려갔고...) 1학년 마치고 군대를 다녀오는게 제일 좋다는 말을 듣고 군대를 다녀오고, 전역 후 부터 제대로 공부를 하기 시작했다. 중도 1년 휴학을 하고 해외를 다녀오고 어찌보면 남들보다는 조금 늦은 졸업이 아니었나. 하지만 전혀 후회는 없다. 어찌되었든 시간이 참 빠른 게 벌써 졸업이라니. 대학생활에 대한 회고는 다른 글로 따로 정리를 해보려고 한다...

[네트워크] HTTP 캐시(Cache) 정책에 대해서 - 최적의 캐시 전략을 만들자

다음 내용은 Google의 Web에 관한 칼럼을 번역한 내용이다. 출처는 글 하단에 명시하였다. 최대한 직역을 하려고 했으며 직역이 어색한 경우 괄호안에 옮긴이 표시로 부연설명을 해놓았다. 개요 네트워크 상에서 무언가를 가져오는 것은 느리고 비용이 크다. 크기가 큰 응답 들은 클라이언트와 서버 사이에 많은 왕복작업이 드는데 그것은 자원이 필요할 때나 브라우저가 작업을 할 때 지연을 시키고 방문자에게 데이터 비용을 초래한다. 결과적으로 캐시 능력과 이전 자원을 재사용하는 것은 성능 최적화에 있어서 매우 중요한 부분이다. 좋은 소식은 모든 브라우저는 HTTP 캐시를 구현하고 있다는 점이다. 당신이 해야할 일은 각 서버단에서 맞는 HTTP 헤더를 내려주어 브라우저에게 응답 캐시를 언제 얼마나 보유할지 가이드하..

[Spring] Jenkins(젠킨스)를 활용한 스프링부트 앱 간단 배포하기

젠킨스를 활용한 스프링부트 앱 배포 젠킨스란? 젠킨스란 소프트웨어 개발 시 지속적 통합 (Continuous Integration) 서비스를 제공하는 툴이다. 젠킨스의 공식 홈페이지를 가보자. 메인화면에 젠킨스의 장점들을 설명하고 있다. 다음은 메인 화면의 장점 내용들을 간단히 번역한 내용이다. 지속적 통합과 전달 확장가능한 자동화 서버에서 젠킨스는 간단한 CI 서버 혹은 지속적 전달을 하는데 쓰인다. 여기서 말하는 지속적 전달이란 프로덕션에 릴리즈하기 위한 코드 변경이 자동으로 준비되는 개발론을 말한다. 현대 애플리케이션의 기반인 지속적 전달은 빌드 단계 이후 모든 코드 변경을 테스트 환경 및 프로덕션 환경에 배포함으로써 지속적 통합을 확장한다. 참고) https://aws.amazon.com/ko/d..

[Spring] RESTful의 HATEOAS 관련 내용 정리 - RESTful 하려면 어떤 조건들이 필요할까?

Hypermedia As The Engine Of Application state 링크에 사용 가능한 URL을 리소스로 전달하여 client가 참고하여 사용할 수 있도록 하는 것 참조문서:https://spring.io/guides/gs/rest-hateoas/ Resource Representation class 만들기 서비스 상호작용을 생각하면서 진행 해보자. 서비스는 GET 요청을 핸들하기 위해 리소스를 /greeting에 노출시킨다. (선택적으로 name 파라미터로 쿼리 스트링을 준다) GET 요청은 200 OK로 "greeting"을 JSON 으로 바디에 내려준다. 그 밖에, 리소스의 상태를 나타내는 JSON은 _links 속성안에 하이퍼미디어 요소들의 리스트가 매우 많다. 가장 기본적인 형태는..

[Spring] Spring Boot 로깅 (Logging) 공식 문서 내용 정리

스프링 Log reference 스프링 부트 공식 문서의 Log 부분을 번역하며 정리해보았다. 26.Logging 스프링 부트는 모든 내부로깅을 Commons Logging을 사용하지만 근본적인 로깅 구현은 남겨두었다. Java Util Logging, Log4J2, Logback은 디폴트 설정들을 제공한다. 각각의 경우 로거는 선택적 파일출력과 함께 콘솔 출력을 사용하도록 사전에 구성이 된다. 디폴트로, Starter를 사용을 한다면 Logback이 기본으로 사용된다. Java Util Logging, Commons Logging, Log4J, Slf4J를 모두 사용하는 의존적 라이브러리가 올바르게 작동하도록 적절한 Logback 라우팅이 포함된다. 자바를 사용하는데 많은 로깅 프레임워크들이 있다. 위..

[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 - 실제 프로젝트 적용기

암호화를 이용하여 원문을 해시화하는 간단한 방법을 찾던 중 Devglan 사이트에서 괜찮은 칼럼을 찾았다. https://www.devglan.com/spring-mvc/storing-hashed-password-database-java 다음 내용은 위 칼럼을 번역한 내용이다. 단순 텍스트에 비밀번호를 저장하는 것은 보안상 매우 취약하다. 이 글에서는 자바를 이용하여 데이터베이스에 해시된 패스워드를 저장하는 방법을 다룬다. 이렇게 한다면 BDA들 조차도 실제 패스워드를 빼내기 불가능하다. 기존의 MD5, SHA-1, SHA-2로 패스워드를 해싱할 수도 있지만 솔트를 치는것은 추가적인 보안을 만들 수 있다. (여기서 솔트를 친다는 말은 원문에 추가적인 문자열을 넣어서 해시를 강화한다고 이해하면 된다) 이 ..

[Spring] Spring Interceptor (인터셉터)와 WebTestClient Session (세션) 테스트 적용기

Spring의 인터셉터 사용과 그것을 테스트하는 WebTestClient에 대해서 다뤄보려고 한다. 특히나 로그인 같은 기능을 구현하는 경우 서버측에서 세션을 생성하게 되는데 그것을 어떻게 하면 간단히 테스트할 수 있는지 알아보자. 먼저 인터셉터가 어떻게 작동하는지 그림을 보자. 인터셉터는 요청을 가로채는 역할을 한다. DispatcherServlet 이전에 가로챌것 처럼 보였지만 사실은 그 이후에 요청을 가로챈다. DispatcherServlet 이전의 요청을 거치는 것은 Filter의 역할로 볼 수 있다. 그리고 중요한 점은 인터셉터는 핸들러 이전을 가로채지만 그 이후도 처리할 수 있다는 점이다. (그림을 보면 핸들러 작업 이후 다시 인터셉터로 들어가는 모습을 볼 수 있다. 잠시 후 코드로 내용을 확..

[Java] 자바의 String 클래스의 특별성 간단 정리

https://www3.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html String is Special - Java Programming Tutorial A Brief Summary of the String Class A Java String contains an immutable sequence of Unicode characters. Unlike C/C++, where string is simply an array of char, A Java String is an object of the class java.lang. Java String is, however, special. Unlike an or www3.ntu.edu.sg 참조 원문입니다. ..

반응형