
블로그 작성법
목표 > 공부한 내용 > 얻었고, 앞으로 이걸 해봐야지 적기

참조 자료
https://openjdk.org/
View
회원가입 버튼을 누른다.
POST /signup API가 호출 된다.
Controller
API가 호출되는 부분
API가 호출되면, Controller의 메소드가 호출 되는 것이다.
API 호출 => Controller의 메소드 호출된다.
Controller는 Service에게 일을 시키는 것.
(Service야 사용자가 일 해오래.)
Model
1. 데이터를 주면서, 이거 좀 찾아주세요
2. 데이터를 주지도 않으면서, 이거 좀 찾아주세요
Service
데이터를 연산하는 부분.
비즈니스 로직을 담당하는 클래스이다.
(Repository 나 일 해야되는데 데이터 좀 줘봐)
Repository
데이터를 관리하는 부분.
비즈니스 로직을 처리하기 위해 DB랑 얘기할 친구
(DB야 데이터 줘봐. Service야 데이터 가져가)

현재 위 코드를 보면
모든 객체 생성이 main 메서드 안에서 진행된다.
객체 생성을 담당하는 클래스를 따로 만들어서 관리할 수 있을까?
지금 문제
객체를 직접 만드는게 문제이다.
MemberRepository memberRepository
= 객체 생성 담당 객체.emeberRepo주세요();
MemberService memberService
= 객체 생성 담당 객체.memberService주세요();
위 방식으로 클래스 분리할 수 있을까?
싱글톤 에 대해 배워보자.
이러한 문제에서 싱글톤은 시작되었다.
계속 새로운 인스턴스를 생성
참고 자료
https://refactoring.guru/ko/design-patterns/catalog
이전 페어프로그래밍 회고
https://velog.io/@yoojoon/2024.04.05
import java.util.Scanner;
public class SelectionSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] strArr = sc.nextLine().split(" ");
int n = strArr.length;
int[] arr = new int[strArr.length];
for(int i=0; i<n; i++){
arr[i] = Integer.parseInt(strArr[i]);
}
for(int i=0; i<n-1; i++){
int idx = i;
for(int j=i+1; j<n; j++){
if(arr[idx] > arr[j]){
idx = j;
}
}
swap(arr, i, idx);
}
for(int x: arr){
System.out.print(x + " ");
}
}
public static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
몰랐던 Java 문법과 개념들을 옆에 분에게 배울 수 있어서 좋았고, 말로 설명하는 연습을 진행할 수 있어서 좋았다.
또한, 오랜만에 선택 정렬을 구현하였는데 과거에 배웠던 기억이 새록새록 떠올랐던 것 같다.
개발자가 되기 전에 나의 코드를 설명하는 시간을 갖을 수 있어서 좋았다.
앞으로도 페어프로그래밍을 통해 다른 사람에게 나의 코드에 대해 설명하는 시간을 가지면 좋을 것 같다.
저번과 마찬 가지로 네비게이터 역할이 어려운 것 같다. 선택 정렬을 너무 오랜만에 보아 이해하는데 급급하였고, 개발의 흐름을 말로 풀어서 설명하는 것이 쉽지 않은 것 같다.
다음에 페어프로그래밍을 진행할 때는 내용을 조금 더 숙지하고, 조금 더 쉽게 드라이버에게 설명하도록 노력해야 할 것 같다.
큰 시스템에서 자바를 가지고 만든 빈
EJB는 Spring 전 시대
Spring에 객체 관리 를 다 떠 맡긴다.
Spring Framework Runtime

여기서 제일 중요해 보이는 단어가 무엇일까?
Core Container
Core의 주요 원리에 대해 알아보자.
Library란?
선배 개발자의 코드를 빌려 쓰는 것
Framework란?
하나의 틀 안에서 특정 서비스를 완성할 수 있는 것.
Spring은 Full Stack Framework 이다.
문제는 이렇게 많은 것들을 다 환경 설정 할 수 있을까?
그래서 등장한 개념이 Spring Boot 이다.
Spring Boot는 사용자 입장에서 환경 설정을 자동으로 해준다.
Spring Boot와 Spring의 차이.
Spring Boot는 웹/WAS가 자동으로 내장되어 있다.
Spring은 별도로 웹/WAS를 설치해줘야 한다.
이제 Web Server와 WAS의 차이에 대해 알아보자.
Web Server는 정적 페이지를 담당하는 서버
WAS는 동적 페이지를 담당하는 서버
정적 페이지: 여러 유저가 들어갔을 때 모두 같은 정보를 페이지에서 보여는 페이지
동적 페이지: 대부분의 웹사이트 페이지로써 내가 원하는 페이지로 계속 바꿔주는 페이지
제가 가지고 있지 않고, Spring이 가지게 된다.DI(Dependency Injection)
의존성 주입
사용하는 것, 사용할 것
객체 지향 세상에서 사용하는 것은 객체 밖에 없다.
객체를 주입하는 것, 객체를 주입당하는 것, 객체를 의존하는 것
Spring Bean
빈은 객체 라고 생각하자.
객체가 돌아다니면서 일이 많은 객체를 빈이라고 하자.
나를 관리할 수 있는 객체를 빈 이라고 한다.
스프링이 관리하는 자바 객체
Spring Container
스프링 기준으로 객체가 여러 개로 뿌려져 있다.
그러면, 객체를 관리하기 쉬울까?
어떻게 쉽게 관리할 수 있을까?
객체를 관리할 통 을 하나를 만들자
이 통 안에 스프링 빈 을 담아서 관리하자.
객체 지향 세상에서 관리할 거는 객체 만 관리한다.
원래는 이 객체를 개발자만 관리를 하다가
이제 Spring에게 제어권을 줬다. 제어의 역전.
Spring이 제어권을 가진다.
이제 A 객체를 사용하려고 하면 어떻게 해야할까?
객체를 스프링 컨테이너에 넣어줘야 한다.
스프링아, 이 객체 지금부터 니가 관리해 = 스프링아, 이 객체 스프링 빈으로 등록해줘

공공기관 표준프레임워크 사이트
https://www.egovframe.go.kr/home/sub.do?menuNo=9
JDK 버전 기준으로 표준 프레임워크 버전이 달라진다.

우리가 2. 버전을 버리고 3. 대로 갈 수 없는 이유이다.
공부하는데에는 3. 버전을 사용해도 무방하다.
2점대를 사용하고 싶을 경우
https://songacoding.tistory.com/137
Jar: Was를 담아서 설치
War: Was 없이 설치
Java 버전
21,22는 아직 안정화가 된 것 같지 않음
Dependencies
사용할 것
선택이 가능하다.
프로젝트 중간중간에 마음대로 설치 가능하다.

RESTful하게 웹을 만들 수 있다.
MVC를 사용한다.
설치후 사용하는데 에러가 발생하였다.

해결 자료
https://velog.io/@nemo/spring-boot-java-error
방법
1. Java를 17버전으로 업데이트
2. Spring boot를 2.x 버전으로 선택하여 프로젝트 생성
인텔리제이 JDK 설정하는 방법
https://dev-emmababy.tistory.com/139
1) @Component
어느 클래스 위에든 @Component를 붙여 놓으면
스프링 컨테이너에 들어간다.
2) @Configuration + @Bean
요구사항 분석
DDD(도메인 개발 기법)
1. 요구사항분석: 모든 용어
2. 유비쿼터스 언어
제일 초반에 배달의 민족이 어떻게 생겼을지 고민하고
요구 사항 분석
Spring 세상이 시작되었다. 오늘 배운 개념인 IoC, DI, Spring Bean, Spring Container에 대한 개념을 앞으로 적용해보고, 새로운 개발 기법인 DDD를 통해 기획을 진행해보고 싶다.