전체 글 555

디자인패턴 (템플릿 메서드 패턴, 전략 패턴)

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 오늘 알아볼 패턴들을 보기 전에 간단한 예시를 먼저 소개하겠다. 비즈니스 로직을 실행하는데 있어서 어딘가에서 병목현상이 자꾸 벌어진다는 것을 확인했다. 어디서 병목현상이 발생하는지 알아보기 위해서 비즈니스 로직 앞뒤에 시간을 체크해 걸린 시간을 뽑아오라는 임무를 부여받았다. @Test void templateMethodV0() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 log.info("비즈니스 로직 1 실행"); //비즈니스 로직 종료 long..

Spring/Spring 2022.01.13

동시성문제와 스레드 로컬

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 이번 시간에는 스프링을 사용할 때 주의할 점과 해결방법인 스레드 로컬에 대해 알아보겠다. 스프링을 사용할 때 우리는 컴포넌트스캔을 이용하고 스프링 빈을 자동 등록하든 수동 등록하든 자연스럽게 사용하고 있다. 스프링의 장점중 하나는 이 스프링 빈이 싱글톤 패턴으로 만들어지기 때문에 메모리를 효율적으로 사용할 수 있다는 점이다. 하지만 이러한 싱글톤 패턴은 조심해서 사용해야 한다. 바로 동시성 문제 때문이다. 동시성 문제에 대한 가벼운 예시를 들어 설명할 예정이다. FieldService.java @Slf4j public class FieldService { private String n..

Spring/Spring 2022.01.10

(궁금증 해소) CPU의 스레드와 자바의 스레드는 과연 같은 의미일까? 다른 의미일까?

스레드에 대해 공부하다 보니 문득 궁금증이 생겼다. https://coding-review.tistory.com/90 스레드와 멀티스레드 스레드 스레드를 알기전에 우리는 프로세스에 대해서 알아야한다. 프로세스는 무엇인가? 프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 coding-review.tistory.com 생각해보니 우리는 스레드란 말을 어디선가 들어봤다. 바로 CPU의 코어와 스레드이다. 자바의 스레드와 CPU의 스레드는 같은의미일까? 다른의미일까? 글에 들어가기 앞서 CPU의 스레드를 하드웨어 스레드 자바같은 언어가 지원하는 스레드를 소프트웨어 스레드라 칭하겠다. 하드웨어 스레드 하드웨어 스레드를 설명하기 전에 CPU의 코어를 먼저 알아보자 ..

Java 2022.01.10

스레드와 멀티스레드

스레드 스레드를 알기전에 우리는 프로세스에 대해서 알아야한다. 프로세스는 무엇인가? 프로레스란 단순히 실행중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이러한 프로세는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 그럼 스레드는 무엇인가? 스레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스는 한개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다. 예를 들어 Controller - Service - Repository로 이어지는 로직을 하나의 프로세스라 하면 이 프로세스는 하나의 스레드가 할당되어 실..

Java 2022.01.10

스프링 MVC 구조 파악하기

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 우리는 앞서 직접 MVC 프레임워크를 만들었다. 안정적인 아키텍처와 사용자의 편의를 위한 기능도 추가했었다. https://coding-review.tistory.com/87 MVC 프레임워크 만들기 이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 우리는 앞으로 점진적인 버전업을 통해 스프링 MVC를 구현해 볼 것 coding-review.tistory.com 이번엔 우리가 직접 만든 MVC 프레임워크와 스프링 MVC 프레임워크를 비교해보고 스프링 MVC에 대해 좀 더 자세히 알아보는 시간을 가지려 한다. 먼저 ..

Spring/Spring 2022.01.07

MVC 프레임워크 만들기

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 우리는 앞으로 점진적인 버전업을 통해 스프링 MVC를 구현해 볼 것이다. -프론트 컨트롤러 도입 (v1) -View 분리 (v2) -Model 추가 (v3) -단순하고 실용적인 컨트롤러 (v4) -유용한 컨트롤러 (v5) 순으로 구현해 나갈 것이다. 스프링 MVC에서 가장 중요한 부분이 바로 프론트 컨트롤러 패턴이다. 스프링에선 프론트 컨트롤러를 디스패쳐 서블릿으로 구현했다. 프론트 컨트롤러란 서블릿 하나를 모든 컨트롤러 앞에 두고 클라이언트 요청을 이 앞에 있는 서블릿이 먼저 받게 하여 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출해주는 역할을 한다. 기본이 되는 엔티티와 R..

Spring/Spring 2022.01.06

@Autowired

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 의존관계 주입에는 다양한 방법이 있다.-생성자 주입-수정자 주입 (setter 주입)-필드 주입 이제부터 하나씩 살펴보며 어떤 방법을 지향해야 하는지 알아보자 1. 생성자 주입 말 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 여태까지 우리가 진행했던 방법이 바로 생성자 주입이다. *특징 -생성자 호출시점에 딱 한번만 호출되는 것이 보장된다. -불변, 필수 의존관계에 사용 불변, 필수 의존관계에 사용한다는 것은 어떤 의미를 가지고 있을까? 불변이라는 의미는 생성자는 클래스가 생성되는 순간에 바로 결정되기 때문에 수정자가 없는한 값을 변경할 수 없는 의미이다. 또한 필수라는 ..

Spring/Spring 2021.12.28

컴포넌트 스캔과 자동 의존 관계 주입

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 https://coding-review.tistory.com/84 싱글톤과 @Configuration 이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 싱글톤 패턴이란 무엇일까? 싱글톤 패턴이란 클래스의 인스턴스가 coding-review.tistory.com 앞서 우리는 @Configuration의 비밀과 싱글톤 컨테이너인 스프링 컨테이너에 대해서 자세히 알아봤다. 근데 여기서 한가지 문제가 있다. AppConfig가 지금은 작으니까 상관없는데 애플리케이션이 점점 커지면 스프링 빈으로 등록해야 하는것이 수십개 수..

Spring/Spring 2021.12.27

싱글톤과 @Configuration

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 싱글톤 패턴이란 무엇일까? 싱글톤 패턴이란 클래스의 인스턴스가 딱 한개만 생성되는 것을 보장하는 디자인 패턴이다. 인스턴스가 딱 한개만 생성되지 않는다면 고객이 요청할 때마다 인스턴스를 새로 만들어야한다. 인스턴스를 계속 새로 만들면 메모리 낭비가 심하기 때문에 인스턴스는 하나만 만드는것이 좋다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스터스..

Spring/Spring 2021.12.27

스프링을 사용해서 DI 구현하기

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 기본 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 순수한 자바를 이용해서 DI를 구현해봤다. https://coding-review.tistory.com/82 순수한 자바로 DI 구현하기 이 포스팅은 인프런 김영한님의 스프링 핵심 원리 기본편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 코드에 들어가기 전 이 코드의 배경이 되는 스토리가 있는데 사장님 coding-review.tistory.com 이번에는 스프링을 이용해서 DI를 구현해보자 이전의 AppConfig를 다음과 같이 변경하면 된다. @Configuration public class AppConfig { @Bean public MemberService m..

Spring/Spring 2021.12.26