분류 전체보기
-
로깅 vs System.out.println() 로깅을 사용하면 다음과 같은 이점이 있습니다. 출력 형식을 지정할 수 있다. 로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있다. 콘솔뿐만 아니라 파일이나, 네트워크 등 로그를 별도의 위치에 남길 수 있다. 성능이 System.out 보다 좋다. 로그 레벨 레벨 설명 Fatal 매우 심각한 에러로 프로그램이 종료되는 경우가 많다 Error 의도하지 않은 에러가 발생한 경우로 프로그램이 종료되진 않는다. Warn 에러가 될 수도 있는 잠재적 사능성이 있는 경우 Info 요구사항에 따라 시스템 동작을 확인할 때, 명확한 의도가 있는 에러의 경우 Debug Info 레벨보다 더 자세한 정보가 필요한 경우로 Dev환경에서 주로 사용 Trace Debug ..
Spring - Logback 설정하기로깅 vs System.out.println() 로깅을 사용하면 다음과 같은 이점이 있습니다. 출력 형식을 지정할 수 있다. 로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있다. 콘솔뿐만 아니라 파일이나, 네트워크 등 로그를 별도의 위치에 남길 수 있다. 성능이 System.out 보다 좋다. 로그 레벨 레벨 설명 Fatal 매우 심각한 에러로 프로그램이 종료되는 경우가 많다 Error 의도하지 않은 에러가 발생한 경우로 프로그램이 종료되진 않는다. Warn 에러가 될 수도 있는 잠재적 사능성이 있는 경우 Info 요구사항에 따라 시스템 동작을 확인할 때, 명확한 의도가 있는 에러의 경우 Debug Info 레벨보다 더 자세한 정보가 필요한 경우로 Dev환경에서 주로 사용 Trace Debug ..
2023.12.28 -
Cache란? Cache란 나중에 요청할 결과를 미리 저장해 둔 후 빠르게 서비스해 주는 것을 의미합니다. 즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 Cache에 접근하여 요청을 처리하게 됩니다. 이러한 cache가 동작할 수 있는 철학에는 파레토 법칙이 있습니다. 파레토 법칙이란 80퍼센트의 결과는 20퍼센트의 원인으로 인해 발생한다는 것을 의미합니다. 이것은 Cache가 효율적일 수 있는 이유가 될 수 있습니다. 모든 결과를 캐싱할 필요는 없으며, 우리는 서비스를 할 때 많이 사용되는 20%를 캐싱한다면 전체적으로 영향을 주어 효율을 극대화할 수 있다는 것을 의미합니다. Cache 사용 방식 Client로부터 요청을 받는다. Cache와 작업한다..
Spring - Redis 연동하기Cache란? Cache란 나중에 요청할 결과를 미리 저장해 둔 후 빠르게 서비스해 주는 것을 의미합니다. 즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 Cache에 접근하여 요청을 처리하게 됩니다. 이러한 cache가 동작할 수 있는 철학에는 파레토 법칙이 있습니다. 파레토 법칙이란 80퍼센트의 결과는 20퍼센트의 원인으로 인해 발생한다는 것을 의미합니다. 이것은 Cache가 효율적일 수 있는 이유가 될 수 있습니다. 모든 결과를 캐싱할 필요는 없으며, 우리는 서비스를 할 때 많이 사용되는 20%를 캐싱한다면 전체적으로 영향을 주어 효율을 극대화할 수 있다는 것을 의미합니다. Cache 사용 방식 Client로부터 요청을 받는다. Cache와 작업한다..
2023.12.27 -
시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불 처리를 해야 합니다. @Service public class CancelOrderService { private RefundService refundService; @Transactional public void cancel() { // order 취소 로직 // 환불 로직 try { refundService.refund(); } catch(Exception ex){ ??? } } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하는 환불 서비스를 호출합니다. 이때 세 가지 문제가 발생할 수 있습니다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 하는가? 롤백해야 하나? 일단 커밋해야..
Spring - Event Driven시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불 처리를 해야 합니다. @Service public class CancelOrderService { private RefundService refundService; @Transactional public void cancel() { // order 취소 로직 // 환불 로직 try { refundService.refund(); } catch(Exception ex){ ??? } } } 보통 결제 시스템은 외부에 존재하므로 RefundService는 외부에 있는 결제 시스템이 제공하는 환불 서비스를 호출합니다. 이때 세 가지 문제가 발생할 수 있습니다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 하는가? 롤백해야 하나? 일단 커밋해야..
2023.12.27 -
Spring Retry 소개 Spring의 재시도 기능은 스프링 배치에 포함되어 있다가 2.2.0 버전부터 제외되어 현재는 Spring Retry 라이브러리에 포함되어 있습니다. Spring Retry는 동작이 실패하더라도 몇 번 더 시도하면 성공할 수 있는 작업은, 자동으로 다시 시도할 수 있는 기능을 제공합니다. build.gradle implementation 'org.springframework:spring-aspects' implementation 'org.springframework.retry:spring-retry' 의존성을 추가해줍니다. @EnableRetry @Configuration @EnableRetry public class RetryConfig { } 애플리케이션에서 Spring ..
Spring - RetrySpring Retry 소개 Spring의 재시도 기능은 스프링 배치에 포함되어 있다가 2.2.0 버전부터 제외되어 현재는 Spring Retry 라이브러리에 포함되어 있습니다. Spring Retry는 동작이 실패하더라도 몇 번 더 시도하면 성공할 수 있는 작업은, 자동으로 다시 시도할 수 있는 기능을 제공합니다. build.gradle implementation 'org.springframework:spring-aspects' implementation 'org.springframework.retry:spring-retry' 의존성을 추가해줍니다. @EnableRetry @Configuration @EnableRetry public class RetryConfig { } 애플리케이션에서 Spring ..
2023.12.17 -
AOP란?Spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춘다면, AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화 하여 재사용할 수 있도록 지원하는 것입니다. Aspect-Oriented Programming이란 단어를 번역하면 관점(관심) 지향 프로그래밍 이 됩니다. 프로젝트 구조를 바라보는 관점을 바꿔보자는 의미입니다.)각각의 Service의 핵심기능에서 바라보았을 때 User과 Order는 공통된 요소가 없습니다. 하지만 부가기능 관점에서 바라보면 이야기가 달라집니다.부가기능 관점에서 바라보면 각각의 Service의 getXX 메서드를 호출하는 전후에 before과 af..
Spring - AOP 총정리AOP란?Spring의 핵심 개념 중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춘다면, AOP(Aspect-Oriented Programming)는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화 하여 재사용할 수 있도록 지원하는 것입니다. Aspect-Oriented Programming이란 단어를 번역하면 관점(관심) 지향 프로그래밍 이 됩니다. 프로젝트 구조를 바라보는 관점을 바꿔보자는 의미입니다.)각각의 Service의 핵심기능에서 바라보았을 때 User과 Order는 공통된 요소가 없습니다. 하지만 부가기능 관점에서 바라보면 이야기가 달라집니다.부가기능 관점에서 바라보면 각각의 Service의 getXX 메서드를 호출하는 전후에 before과 af..
2023.12.17 -
Spring의 요청 Flow HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패치) -> 스프링 인터셉터 -> 컨트롤러 Spring은 위와 같은 flow를 가지고 있습니다. 필터 필터는 서블릿이 지원하고 서블릿 앞에서 동작하면서 공통 관심 사항 처리 및 부가 기능을 수행합니다. 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출되기 때문에 서블릿이 호출되기 전에 부가적인 작업을 하거나 서블릿 호출을 막을 수 있습니다. 예를 들면, 모든 요청에 대한 로그를 남긴다든지, 특정 url 패턴으로 들어온 요청을 막는다든지, 비 로그인 사용자에 대한 접근을 막는다든지에 대한 기능을 수행할 수 있습니다. 특히, 필터는 적절한 요청이 아니라고 판단되면 서블릿 호출 전에 끝낼 수 있기 때문에 로그인 여부를 체크하기..
Spring - Filter와 InterceptorSpring의 요청 Flow HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패치) -> 스프링 인터셉터 -> 컨트롤러 Spring은 위와 같은 flow를 가지고 있습니다. 필터 필터는 서블릿이 지원하고 서블릿 앞에서 동작하면서 공통 관심 사항 처리 및 부가 기능을 수행합니다. 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출되기 때문에 서블릿이 호출되기 전에 부가적인 작업을 하거나 서블릿 호출을 막을 수 있습니다. 예를 들면, 모든 요청에 대한 로그를 남긴다든지, 특정 url 패턴으로 들어온 요청을 막는다든지, 비 로그인 사용자에 대한 접근을 막는다든지에 대한 기능을 수행할 수 있습니다. 특히, 필터는 적절한 요청이 아니라고 판단되면 서블릿 호출 전에 끝낼 수 있기 때문에 로그인 여부를 체크하기..
2023.12.09 -
타임리프를 사용하는 이유 타임리프는 순수 HTML 파일을 웹 브라우저에서 열어도 내용 확인이 가능하고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과 확인이 가능한 유연함을 제공합니다. 또한 spring에서 공식적으로 지원 & 권장하고 있습니다. 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿 이라 합니다. 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존의 것을 대체합니다. th:xxx 이 없으면 기존 html 속성이 적용됩니다. 문법 공식 문서 : https://www.thymeleaf.org/documentation.html 자세한 문법은 공식문서를 참고하세요. 사용 선언 맨 위에 있는 html 태그 안에 thy..
Spring Thymeleaf(타임리프) 기본 문법 정리타임리프를 사용하는 이유 타임리프는 순수 HTML 파일을 웹 브라우저에서 열어도 내용 확인이 가능하고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과 확인이 가능한 유연함을 제공합니다. 또한 spring에서 공식적으로 지원 & 권장하고 있습니다. 이렇게 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿 이라 합니다. 타임리프 핵심 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존의 것을 대체합니다. th:xxx 이 없으면 기존 html 속성이 적용됩니다. 문법 공식 문서 : https://www.thymeleaf.org/documentation.html 자세한 문법은 공식문서를 참고하세요. 사용 선언 맨 위에 있는 html 태그 안에 thy..
2023.12.07 -
2022 상반기에 지원하면서 느꼈던 것들을 정리하고, 신입으로 백엔드 개발 취업을 준비하시는 분들께 도움이 되길 바라며 글을 작성합니다. ✍️ 🙋♂️ 저는.. 저는 재수해서 입학한 첫 대학에서 전기공학과를 전공했고 군 복무를 하면서 자퇴를 결심했습니다. 그리고 군대에서 다시 입시 준비를 하여 들어간 두 번째 대학에서는 기계공학과를 전공했고 2년 동안 수석을 차지했습니다. 그렇게 "잘" 하고 있던 기계공학 공부를 포기하고 3학년으로 올라가면서 "재미"를 느꼈던 컴퓨터공학과로 전과를 했습니다. 그리고 이와 비슷한 시기에 SW 마에스트로에 합격하여 12기로도 활동했습니다. 🏇 취준 시작 2022년 3월, 4학년 1학기로 학교를 다니면서 졸업작품 프로젝트와 동시에 취업을 준비하기 시작했습니다. 4학년 1학기부..
2022 상반기 네이버웹툰 신입 공채 합격 회고2022 상반기에 지원하면서 느꼈던 것들을 정리하고, 신입으로 백엔드 개발 취업을 준비하시는 분들께 도움이 되길 바라며 글을 작성합니다. ✍️ 🙋♂️ 저는.. 저는 재수해서 입학한 첫 대학에서 전기공학과를 전공했고 군 복무를 하면서 자퇴를 결심했습니다. 그리고 군대에서 다시 입시 준비를 하여 들어간 두 번째 대학에서는 기계공학과를 전공했고 2년 동안 수석을 차지했습니다. 그렇게 "잘" 하고 있던 기계공학 공부를 포기하고 3학년으로 올라가면서 "재미"를 느꼈던 컴퓨터공학과로 전과를 했습니다. 그리고 이와 비슷한 시기에 SW 마에스트로에 합격하여 12기로도 활동했습니다. 🏇 취준 시작 2022년 3월, 4학년 1학기로 학교를 다니면서 졸업작품 프로젝트와 동시에 취업을 준비하기 시작했습니다. 4학년 1학기부..
2023.12.06