분류 전체보기 250

[Spring] @Transactional 롤백은 언제 되는 걸까? - 예외가 발생했는데도 DB 반영이 된다고?

@Transactional 애노테이션 스프링은 @Transactional 애노테이션이 붙은 클래스에 프록시를 생성합니다. 프록시는 트랜잭션 로직을 메서드 앞뒤에 넣어줍니다. 이 글은 @Transactional 의 롤백에 대해서 다룹니다. rollbackFor이라는 것을 써보면서 어디에 어떻게 적용되는지 알아보겠습니다. 책 정보를 저장하는 아주 간단한 코드입니다. 다음은 책을 저장하는 메서드입니다. @Transactional 애노테이션의 rollbackFor 속성에 대해서 RuntimeException.class를 등록했습니다. 이 애노테이션은 스프링에게 런타임 예외가 발생한다면 롤백을 하라고 말합니다. 그렇다면 rollbackFor 속성을 주지 않는다면 어떻게 될까요? 사실은 스프링은 디폴트로 UnChe..

[Java] Thread(스레드)에 관한 고찰 - 스레드 관련 코드를 어떻게 짜야할까

이번 포스팅은 스레드를 다루는 방법과 이슈들을 소개합니다. 스레드 이슈에 있어서 간단한 예는 두 스레드가 같은 객체를 공유하면서 서로 간섭하며 예상치 못한 결과를 내놓는 것입니다. 예제는 스레드를 공부하면서 한 번 쯤 봤을 만한 아주아주 간단한 예제입니다. 하지만 왜 그렇게 예상치 못한 결과가 되는지 명확히 설명하는 곳이 없어 책을 참고하여 정리를 해보았습니다. 먼저, 아주 간단하고 대중적인 예로 코딩을 해보았습니다. 계산기로 초기화 된 index 값에서 getNextIndex 를 호출하면 다음 번 인덱스를 반환하는 클래스 입니다. 다음과 같이 두 개의 스레드를 만들고 계산기의 인덱스를 각각 1만번 씩 호출을 해보았습니다. 최적의 시나리오는 각각 Set 에 고유한 숫자 1만개씩 보유하는 경우인데요. 사실..

[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 헤더를 내려주어 브라우저에게 응답 캐시를 언제 얼마나 보유할지 가이드하..

[우아한테크코스] 레벨 2 후기 - 코드 리뷰 정리해보기

우아한테크코스 레벨2를 진행하면서 개인 블로그 미션, 팀 프로젝트 미션에 대한 리뷰 복습(?) 겸 정리를 해 보았다. 학습량이 꽤나 많아지면서 놓치거나 소화 하지 못한 부분도 많았다. 모두 다 소화하면 좋겠지만 그것보다는 최대한 놓치는 부분들을 최소화 해보려고 한다. 리뷰 받은 것들이나 공부 했던 것들을 다시 열어 보니까 완전히 잊고 있거나 새로운 것들이 보였다. ID의 wrapper type 과 primitive type @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // long id ? id를 원시형과 래퍼타입 중 어느것을 써야할까? 원시형을 쓰게 되면 null이라는 것을 적절히 표현할 수 없다. 원시형에서 엔티티를..

[Spring] 배포 환경별 로그 (logging) 설정하기

배포 환경별 로그 설정하기 본 내용은 필자가 공부하면서 적용해본 것이므로 best practice가 아닐 수 있습니다. 본인의 프로젝트에 맞는 방향으로 참고만 하면 될 것 같네요. 지난 글에서는 젠킨스를 활용하여 배포까지 해보았다. https://pjh3749.tistory.com/261 [Spring] Jenkins(젠킨스)를 활용한 스프링부트 앱 간단 배포하기 젠킨스를 활용한 스프링부트 앱 배포 젠킨스란? 젠킨스란 소프트웨어 개발 시 지속적 통합 (Continuous Integration) 서비스를 제공하는 툴이다. 젠킨스의 공식 홈페이지를 가보자. 메인화면에 젠킨스의 장점들을.. pjh3749.tistory.com 이제는 여러 서버별로 배포를 할 때 각자 다른 설정으로 배포를 해보려고 한다. 예를들..

카테고리 없음 2019.09.12

[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 속성안에 하이퍼미디어 요소들의 리스트가 매우 많다. 가장 기본적인 형태는..

반응형