제어의 역전 IoC (Inversion of Control)AppConfig에서 구현체를 생성하고 주입해주는 역할을 한다.-> 프로그램의 제어의 흐름은 AppConfig가 가져간다.OrderServiceIml 은 필요한 인터페이스들을 호출하지만 어떤 구현객체가 실행될지 모른다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.해당 포스팅은 프레임워크와 라이브러리를 비교하며 제어의 역전을 설명하고 있다. 의존관계 주입 DI (Dependency Injection)의존관계는 정적 클래스 의존 관계와, 런타임에 결정되는 동적 객체(인스턴스) 의존관계 둘을 분리해서 생각해야한다.해당 포스팅에서 DI 에 대해 설명하고 있다.정적 클래스 의존 관계클래스..
전체 글

AWS 구조 3계층: Region -> AZ -> IDCRegion전 세계에 존재 (국가단위) = 물리적으로, AZ (Availability Zone) 의 집합대부분의 AWS 서비스들은 특정 리전에서 제공된다. (Region-scoped, 리전 서비스 라고 부른다)AZ(Availabilty Zone)한 국가 내 지역별로 설치되어있는 IDC(Internet Data Center) 의 집합시드니 Region (ap-southeast-2) 의 3개의 AZ(Availability Zone)로 구성ap-southeast-2a/2b/2c: 이렇게 Region 뒤에 넘버링이 붙는다.Multi AZ 실무에서 왜 필요한가? 가용성한쪽의 AZ화재라던가 네트워크 이슈 등이 발생했을 시, 다른 한쪽의 AZ로 커버하기 위함카카..

클라우드 컴퓨팅 모델IaaS (Infrastructure as a Service)클라우드를 통해 컴퓨팅, 스토리지, 네트워킹, 가상화와 같은 주문형 인프라 리소스를 제공사용자가 자체 데이터 센터 인프라를 관리, 유지 관리 또는 업데이트할 필요가 없지만, OS, 미들웨어, 가상머신, 앱 또는 데이터를 책임진다.AWS EC2 서버를 생각하면 된다 -> AWS AMI(OS이미지) 선택을 해야 서버 구성 가능클라우스 서버시가 제공: 네트워크, 서버개발자가 직접 구축: OS 및 런터임 구성, 어플리케이션 구동AWS EC2 서버: AWS AMI(OS이미지) 선택을 해야 서버 구성 가능 PasS (Platform as a Service)클라우드를 통해 애플리케이션을 개발하는 데 필요한 모든 하드웨어 및 소프트웨어 리..

역할과 구현 분리역할과 구현을 분리해서 자유롭게 구현 객체를 조립할 수 있도록 설계한 클래스 다이어그램회원을 메모리에서 조회하고, 정액 할인 정책(고정 금액)을 지원해도 주문 서비스를 변경하지 않아도 된다. public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = newMemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int item..

왜 Github Action?CI/CD 툴로 유명한 건 Github Action 혹은 Jenkins 가 있는데, Github Action 사용이유는 Jenkins는 Jenkins 위한 서버를 우리가 따로 구축해야하는데 Github Action은 Github 가 공짜로 제공한다.또한 소스코드 중앙 관리를 위해 Github Repository 를 쓰는 데 Github Action 과 호환성이 좋다. GitHub Actions를 사용하면 자동으로 코드 저장소에서 어떤 이벤드(event) 가 발생했을 때, 특정 작업이 일어나게 하거나, 주기적으로 어떤 작업들을 반복해서 실행시킬 수도 있다.테스트: 누군가가 코드 저장소에 Pull Request 를 생성하게 되면, Github Action을 통해 해당 코드 변경..

https://docs.github.com/en/enterprise-cloud@latest/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-gradle도입 이유스프링부트로 협업하면서 PR을 사용하기로 했는데 develop 브랜치에 충돌만 안나면 머지되도록 되어 있었다.github action을 배우고, 테스트 워크플로를 작성할 수 있다는 것을 알게 되었고, 이 기능을 활용해서 다른 사람 코드가 컴파일 오류 없이 잘 돌아가는지 알아서 테스트 해주면 정말 편하겠다는 생각이 들어서 사용해보기로 했다.Build and test (Java & Gradle)공식 문서에 스프링부트로 애플리케이션을 만드는 프로젝트에서 ..

https://git-scm.com/docs/git-add파일에 여러 개 기능이 구현되어 있는 경우하나의 파일에 여러 개 기능이 구현된 경우, 어떻게 기능 단위로 add 할 수 있는가?git add -p 위 명령어로 파일 내에서 변경된 내용을 쪼개서 추가할 수 있다.README.md에서 A, B, C가 추가된걸 확인할 수 있다. --patch, -p이 옵션은 변경된 파일에서 변경된 부분을 라인별로 선택해서 `add` 할 수 있는 옵션이다.add 할지 말지는 콘솔에서 대화형으로 선택할 수 있는데, 아래와 같은 타입이 있다.y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ..

HttpSession and RESTful APIs스프링 공식 문서 Spring Session은 Session을 헤더로 주고 받으면서 RESTful API와 동작할 수 있다. Tomcat의 경우 SessionID를 JSESSIONID라는 키의 쿠키를 생성해서 set-cookie 헤더에 담아서 전달 Requset시 Header에 SessionId가 포함되어 절달된다면 (Cookie 헤더에 SeesionId가 전달될 것) 서블릿 컨테이너는 세션을 발급하지 않고 해당 SessionId에 해당하는 세션을 전달하게 되고, SessionId가 포함되지 않는다면 HttpSession을 요구하는 모든 요청에 대해 새로운 Session을 발급.private String createSession(HttpServletReq..

Spring SessionSpring Session 공식 문서Spring Sesison은 유저 세션 정보 관리를 위한 API와 구현체를 제공한다. Spring session 은 세션 클러스터링을 유지하도록 한다.세션 클러스터링이란?클러스터는 군집이나 무리를 뜻함두 대 이상의 WAS가 동시에 한가지 업무를 수행하도록 만드는 기술세션 클러스터링은 WAS가 두 대 이상 설치되어 있을 경우 동일한 세션으로 세션 관리하는 것을 의미동일한 세션으로 여러 WAS 서버에서 사용할 수 있다는 말 예를 들어서 설명하자면,요청이 오면 L4 스위치가 해당 사용자가 접속했던 WAS로 유도해서 사용하던 세션을 그대로 사용할 수 있도록하지만 스레드 풀이 고갈되어서 다른 WAS를 사용하게 된다면 이때 세션 불일치 문제가 발생할 수 ..