- [ 정리/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..
- [ 참고/개발환경 및 오류 ][인텔리제이] Cannot resolve symbol 'springframework'2023-10-14 06:40:09오류 이전 프로젝트를 열었더니 스프링 애노테이션 에러발생, 스프링 관련 키워드 에러, Cannot resolve symbol 메시지 발생 import 때문에 발생하는 에러로 재빌드 해주면 해결된다고 함 해결방법 방법이 여러 가지라 하나씩 해보고 안되면 인텔리제이 최신버전으로 업데이트 진행 재빌드하기 Build → Rebuild Project 실행 (해결 안 됨) 캐시 지우고 재시작 File → Invalidate Caches.. 실행 (해결 안 됨) Gradle 리프레쉬 Gradle → Refresh Gradle Dependencies (해결)
- [ 정리/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 클래스를 상속받을경우 다른 클래스 상속이..
- [ 정리/Java ]자바의 정석 142~147강 ch12 지네릭스, 열거형, 애너테이션(2)2023-09-16 02:25:41자바의 정석 기초편(2020최신) ch 12-17~20 열거형 1. 열거형 enum 관련 상수들을 같이 묶어 놓음, java는 타입에 안전한 열거형 제공 열거형은 값과 타입 모두 체크 class Card { enum Kind {CLOVER, HEART, DIAMOND, SPADE} enum Value {TWO, THREE, FOUR} } if(Card.CLOVER == Card.TWO) // false // 0 == 0 인데 왜 false? // 타입이 달라서 비교 불가 Kind == Value라서 false 2. 열거형의 정의와 사용 열거형 인스턴스를 생성해 사용 열거형 상수의 비교에 ==와 compareTo() 사용 가능, 비교연산자는 사용 불가 // 열거형 정의 enum 열거형 이름 { 상수1, 상..