전체 글

멈추지 않고 꾸준히 배우는 이들에게 도움이 되고픈 블로그입니다.
프리코스/프리코스

MVC 패턴 및 패키지 구조

1. spring project도 아닌데 왜 mvc 패턴을 고려? 자동차 경주 게임을 구현할 때까지만 해도 크게 중요성을 느끼지 못하고 있었다. 내가 만든 분류 안에서 코드가 다 동작했으니...하지만 TDD를 수행할 때 문제점을 깨달았다. 내가 분류한 조건들이 단일체계원칙을 실질적으로 지키고 있지 않았기 때문에 TDD를 수행할 수가 없었다. 출력과 기능이 섞여서 method는 대부분 void로 반환 값이 존재하지 않았고 TDD로 검증도 불가... 향후 리팩토링을 할 경우에도 TDD가 안되니 수정 코드가 올바르게 작동한다는 보장이 없다... 해당 문제점을 인지하고 어떤 방식으로 패키지를 분류해야할지 고민하고 찾아보던 중 mvc 패턴을 사용한다는 힌트를 얻었다. 꼭 Spring이 아니더라도 해당 구조로 분류..

convention guide/convention

Git commit 컨벤션 및 템플릿

1. Git Commit 컨벤션 커밋 메시지는 제목, 본문, 꼬리말 3가지 파트로 나뉘고 각 파트는 빈줄을 두어서 구분 # git commit type(옵션): ["해시태그"issueNumber -] Subject # -> 제목 : 최대 50글자, 마침표 X, 영문 표기시 동사원형, 첫char 대문자 body(옵션) # -> 본문 : 어떻게 X, 무엇을 왜 O , 75자 남기지 말 것 footer(옵션) # -> 꼬리말 : issue tracker ID를 명시하고 싶은 경우 작성 # 예시 Feat: "추가 로그인 함수" 로그인 API 개발 Resolves: #123 Ref: #456 Related to: #48, #45 1.1. 제목 1.1.1. 타입 태그와 제목으로 구성, 태그는 영어로 쓰되 첫문자는 ..

spring/spring & boot 설정

⭐️ 3. Web & WAS 경로

1. web server, web app server 웹 http 기반으로 작동 = http protocol의 규칙을 따라서 요청과 응답이 오고 간다. http 메시지 거의 모든 형태의 데어터 전송 가능 ex) HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API) 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 2. 용어 2.1. 웹 서버(WEB) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 webServer가 가지고 있는 html,css.js.img,avi 를 client가 요청시, http로 응답해주는 것 ex) NGINX, APACHE 2.2. 웹 애플리케이션 서버(WAS) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프..

spring/spring 핵심

스프링 핵심 원리 이해 8 - bean scope

1. bean scope scope: 범위, bean이 존재할 수 있는 범위 1.1. scope 종류 싱글톤 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 스프링 컨테이너가 프로토타입 빈의 생성 → 의존관계 주입 → 초기화 메서드 까지 관여 (spring bean 생명 주기) 이후는 관리하지 않는 매우 짧은 범위의 스코프 종료 callback 없음 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 싱글톤, 프로토타입, request 정도 알면 충분 웬만하면 싱글톤으로 처리를 하는 것을 권..

spring/spring 핵심

스프링 핵심 원리 이해 7 - bean 생명주기 callback

1. 빈 생명주기 콜백 시작 Spring bean 생성, 종료 직전 @Bean 객체 내부 method를 호출해주는 기능 생성후 초기화시 호출 죽기 직전 안전 종료 메서드 호출 필요한 이유 db connection pool, network socket처럼 app시작 시점에 필요한 연결을 미리 해둘 경우 app 종료 시점에 연결을 모두 종료하는 작업을 진행하기 위해서 객체 내부 종료 작업 필요 1.1. 예제 문제 코드 - 미리 connect()를 하고 싶어서 생성자 내부에 connect() 넣어봤다 - 시도를 한 것. 잘못된 시도 package hello.core.lifecycle; public class NetworkClient { private String url; // 생성자 내부에 connect() ..

spring/spring 핵심

스프링 핵심 원리 이해 6 - 의존관계 자동 주입

1. 의존관계 주입 방법 - 4가지 크게 4가지 존재 생성자 주입 - 권장 수정자 주입(setter 주입) - 정말 필요시 -- 3, 4 번은 사용하지 말 것 -- 필드 주입 일반 메서드 주입 복습 spring container 설정 과정 모든 @Component 찾아서 등록 (의존관계 주입을 바로 수행하지 않는다.) 의존 관계 주입을 수행 (@Component가 다 등록 된 이후에 수행) 하지만 예외적으로 생성자 주입이나 수동 bean 설정 같은 경우에는 java code 특성상 1,2, 단계가 동시에 진행 1.1. 생성자 주입 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 불변 : (외부에서 생성자 값 변경 못하게) 필수(private final를 이용해서 생성자의 pa..

convention guide/Design Pattern

2. Adapter : 사이에 끼워 재사용

1. Adapter 패턴 재사용성 향상 종류 상속 사용 : class에 의한 패턴 포함관계 사용 : instance에 의한 패턴 - 이게 더 유연, 많이 사용. 데코레이터 패턴과 같이 사용 가능해짐 java는 다중 상속이 안되기 때문에 포함 관계를 이용해서 해결한다. Wrapper 패턴이라고도 불린다. 2. 구현 코드 3. 장점 왜 그냥 프로그래밍하면 되지 adapter 패턴 같은 걸 생각해야하냐? 이미 존재하는 class를 이용하는 경우 (재사용하고 싶을 때) 해당 패턴 사용시 빠르게 필요 메서드 사용이 가능해짐 그리고 이미 존재하는 것이라 검증되 됨 주의 보통 우리는 기존 클래스 소스를 만져서 수정을 한다. 하지만 그렇게 하면 동작 테스트가 이미 끝난 기존 클래스에 손을 댔으니 수정한 후에 다시 테스..

convention guide/Design Pattern

1. Iterator - 처리를 반복한다.

1. Iterator 패턴 for문의 int i를 추상적으로 일반화 한 것 종류 Iterator 향상된 for문 iterator를 가지고 있는 type 배열 : hasnext()가 없다. 대신 향상된 for문으로 사용 Collection : 향상된 for문 사용 가능 직접 Iterator 패턴 구현 2. 실제 구현 코드 // github 링크 현재 코드가 문제가 있음 BookShelfIterator가 BookShelf를 땡겨서 쓰는 것이 아니고 BookShelf에게 시켜야된다. 이게 과제 : 뭔가 중간에 관리해주는 친구가 필요 3. 해당 패턴 장점 왜 Iterator와 같이 번거로운 방식을 사용? 구현과 분리하여 반복할 수 있기 때문 bookShelf 구현체가 변경이 되어도 while loop는 정상 동..

wooweee
코아일체