- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 5) 싱글톤 컨테이너2023-10-22 13:43:42스프링 핵심 원리 - 기본편 Session 5 싱글톤 컨테이너 1. 웹 애플리케이션과 싱글톤 1) 스프링이 없는 순수한 DI 컨테이너 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 요청할 때마다 객체가 생성해 메모리 낭비가 심한 문제점이 있다. 객체 하나만 생성되고 공유하도록 설계해야 한다. ▶ 싱글톤 패턴 2) 순수한 DI컨테이너 테스트 // 구성정보 클래스인 AppConfig에서 객체를 가져온다. AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.membe..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 4) 스프링 컨테이너와 스프링 빈2023-10-21 15:53:17스프링 핵심 원리 - 기본편 Session 4 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 1) 스프링 컨테이너 생성 ApplicationContext appllicationContext = new AnnotaionConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너라고 하고 인터페이스임 AppConfig에 @Configuration 붙여서 만든 것이 애노테이션 기반의 설정 클래스를 만들어 스프링 컨테이너를 만든 것 2) 스프링 컨테이너 생성과정 new AnnotationConfigApplicationContext(AppConfig.class)로 스프링 컨테이너 생성 매개변수로 구성정보를 지정해줌 스프링 컨테이너는 매..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 3) 스프링 핵심 원리 이해2 - 객체 지향 원리 적용2023-10-18 18:21:27스프링 핵심 원리 - 기본편 Session 3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 1. 새로운 할인 정책 개발 1) 새로운 할인 정책 정액 할인에서 정률 % 할인 정책으로 변경 회원 등급이 VIP인 경우 10% 할인 FixDiscountPolicy에서 RateDiscountPolicy로 변경 2. 새로운 할인 정책 적용과 문제점 1) 문제점 역할과 구현을 충실하게 분리, 다형성도 활용하고 인터페이스와 구현 객체도 분리했으나 DIP, OCP 같은 객체 지향 설계 원칙을 위배 DIP : 주문 서비스 클라이언트는 추상(인터페이스)뿐만 아니아 구현 클래스에도 의존 OCP : 기능을 확장해서 변경하면 클라이언트 코드에 영향 있음 public class OrderServiceImpl implemen..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 2) 스프링 핵심 원리 이해12023-10-18 12:04:00스프링 핵심 원리 - 기본편 Session 2 스프링 핵심 원리 이해 1 - 예제 만들기 1. 비즈니스 요구사항과 설계 1) 회원 회원 가입하고 조회가능 회원 등급은 일반과 VIP 두 가지 회원 데이터는 자체 DB 구축할 수 있고, 외부 시스템과 연동할 수 있다(미확정) 2) 주문과 할인 정책 회원은 상품 주문 가능 회원 등급에 따라 할인 정책 적용 가능 할인 정책은 VIP는 1000원 할인해 주는 고정 금액 할인 적용(나중에 변경될 수 있음) 할인 정책은 변경 가능성 높음, 기본 할인정책 미정상태고 최악의 경우 할인을 적용하지 않을 수도 있음 ▶ 할인 정책이 미정이기 때문에 인터페이스를 만들고 구현체로 언제든지 변경 가능하게 설계 2. 회원 도메인 설계 1) 회원 도메인 요구사항 회원 가입하고 조회가능..
- [ 정리/Java ][JAVA] 문자열 곱하기 repeat메서드2023-10-16 09:47:03자바 11에 새로 추가된 String 메서드 문자열을 파라미터만큼 반복하여 반환해준다. 내부적으로 Arrays.fill()과 System.arraycopy() 메서드를 호출한다. 0 → 빈 문자열 음수 → IllegalArgumentException 예외 발생 String str = "abc"; int count = 3; System.out.println(str.repeat(count)); // 출력결과 abcabcabc
- [ 정리/Spring ][Spring] 스프링 입문 7) AOP2023-10-15 23:00:24스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 7 AOP 1. AOP가 필요한 상황 1) AOP가 필요한 상황 회원가입과 같은 로직은 핵심 관심사항, 시간 측정과 같은 로직은 공통 관심 사항이라고 함 공통 관심 로직이 핵심 비즈니스 로직과 섞이면 유지보수가 어렵다. 공통 관심 로직을 별도의 공통 로직으로 만들기 매우 어렵고 로직을 변경할 때 모든 로직을 찾아가며 변경해야함 ▶ 이러한 문제점을 해결하기 위해 AOP를 적용 2. AOP적용 1) AOP(Aspect Oriented Programming) 공통 관심사항과 핵심 관심 사항을 분리 2) 시간 측정 AOP 작성 @Aspect // AOP 적용 @Component // 스프링 빈으로 등록하기위해 componentScan방식 사..
- [ 정리/Spring ][Spring] 스프링 입문 6) 스프링 DB 접근 기술2023-10-15 22:03:19스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 6 스프링 DB 접근 기술 1. 순수 JDBC 1) 환경설정 build.gradle에 jdbc, h2 데이터베이스 관련 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' application.properties에 데이터베이스 연결 설정 추가 spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa 2) JDBC 리포..
- [ 정리/Spring ][Spring] 스프링 입문 5) 회원 관리 예제 - 웹 MVC 개발2023-10-14 17:06:20스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 5 회원 관리 예제 - 웹 MVC 개발 1. 회원 웹 기능 - 홈 화면 추가 1) 홈화면 추가 @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } localhost:8080 주소로 들어가면 homeController의 home()이 호출이 되고 home.html을 웹브라우저에게 전달 ▶ 컨테이너에서 관련 컨트롤러를 찾고 없으면 static 페이지, 있으면 컨트롤러가 호출되기 때문에 home.html이 뜬다 2. 회원 웹 기능 - 등록 1) 회원 등록 폼 memberController에 추가 // 등록 화면으..
- [ 정리/Spring ][Spring] 스프링 입문 4) 스프링 빈과 의존관계2023-10-14 16:37:15스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 4 스프링 빈과 의존관계 1. 컴포넌트 스캔과 자동 의존관계 설정 멤버 컨트롤러가 멤버 서비스를 통해 회원가입, 데이터 조회 가능함 ▶ 멤버 컨트롤러가 멤버 서비스를 의존한다 스프링이 시작될 때 스프링 컨테이너가 생성되고 @Controller 객체를 생성해(= 스프링 빈) 스프링 컨테이너에서 관리 1) 회원 컨트롤러에 의존관계 추가 @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService..
- [ 정리/Spring ][Spring] 스프링 입문 3) 회원 관리 예제 - 백엔드 개발2023-10-14 14:19:17스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 3 회원 관리 예제 - 백엔드 개발 1. 비즈니스 요구사항 정리 1) 일반적 웹 애플리케이션 계층 구조 컨트롤러 ▶ 웹 MVC의 컨트롤러, API의 컨트롤러 역할 서비스 ▶ 핵심 비즈니스 로직 구현(회원 중복가입 불가) 도메인 ▶ DB에 주로 저장하고 관리되는 비즈니스 도메인 객체(회원, 주문, 쿠폰 등) 리포지토리 ▶ 데이터 베이스에 접근, 도메인 객체를 DB에 저장하고 관리, 핵심 비즈니스 로직이 동작하도록 구현한 객체 2) 클래스 의존 관계 데이터 저장소 선정되지 않아 인터페이스로 만들고 메모리기반 구현체 생성 ▶ 추후 저장소 선정 후 구현 클래스 변경할 수 있도록 인터페이스로 생성 2. 회원 도메인과 리포지토리 만들기 1) 회..
- [ 정리/Spring ][Spring] 스프링 입문 2) 스프링 웹 개발 기초2023-10-14 08:26:14스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 1 스프링 웹 개발 기초 1. 정적 컨텐츠 1) 스프링 부트 정적 컨텐츠 기능 static content ① localhost:8080/hello-static.html 주소로 들어가면 내장 톰캣 서버가 요청을 받는다 ② 스프링 부트가 컨테이너에 hello-static 관련 컨트롤러를 확인 ③ 컨트롤러가 없으면 src/main/resources/static 폴더에서 hello-static 관련 html을 찾아 웹브라우저에게 전달 2. MVC와 템플릿 엔진 MVC : Model, View, Controller ① localhost:8080/hello-mvc 주소로 들어가면 내장 톰캣 서버가 요청을 받는다 ② 스프링 부트가 컨테이너에 he..
- [ 정리/Java ]자바의 정석 148~157강 ch13 쓰레드2023-10-12 12:07:49자바의 정석 기초편(2020최신) ch 13-1 프로세스와 쓰레드 1. 프로세스 process 실행 중인 프로그램, 자원(메모리, CPU 등)과 쓰레드로 구성 2. 쓰레드 Thread 프로세스 내에서 실제 작업을 수행, 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있음 새로운 프로세스 생성보다 새로운 스레드 생성이 적은 비용 3. 멀티스레드의 장단점 장점 단점 시스템 자원을 효율적으로 사용 가능 사용자에 대한 응답성 향상 코드 간결 동기화 synchronization 주의 교착상태가 발생하지 않도록 주의 각 스레드가 효율적으로 고르게 실행될 수 있게 해야함(기아현상) ch 13-3~6 스레드의 구현과 실행 1. 스레드 구현 자바는 단일 상속만 지원, Thread 클래스를 상속받을경우 다른 클래스 상속이..