분류 전체보기

본 포스팅은 김영한님의 강의를 듣고 재구성하였습니다. 스프링 컨테이너의 생성 ApplicationContext -> 스프링 컨테이너 ApplicationContext -> Interface 스프링 컨테이너는 애노테이션기반의 자바클래스 뿐만 아니라 XML을 기반으로 만들 수 있다. 방금 예제에서 Appconfing 를 사용했던 방식이 전자에 해당. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); new Annotaion~ 은 ApplicationContext의 구현체이다. TMI) 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory , ApplicationContext 로 ..
도메인 협력관계 - 기획자도 같이 보는 회원클래스 다이어그램 -> 인터페이스, 구현체 정적 회원객체 다이어그램 -> 실제 동적시간에 확정된 객체들 동적임 실행해봐야 알 수 있음. 회원도메인 설계의 문제점 이 코드의 설계상 문제점은?? 다른 저장소로 변경할 때 OCP 원칙 준수하고있는지? DIP를 잘 지키고 있는지? 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음. 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4. 주문 결과 반환: 주문 서비스는 할인 결과를 포함한..
Spring 의 탄생 배경 EJB 답답해서 만듦 표준 인터페이스 -> JPA JPA를 구현한 구현체들이 존재 Spring + JPA 둘다 중요 스프링 생태계 스프링 -> 여러가지 기술들의 모음 스프링 프레임워크 - 핵심 스프링부트 - 여러 기술을 사용할 수 있게 도와줌 스프링 데이터 - CRUD 편하게 도와줌 스프링 세션 - 세션기능을편안 시큐리티 - 보안 문서 - api 문서 스프링 배치 - 배치처리 특화 스프링 프레임워크 핵심기술 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹기술 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 트랜잭션, JDBC, ORM지원, XML지원 기술 통합 테스트 스프링 기반 테스트 지원 언어 코틀린, 그루비 스프링 부트 스프링을 편리하게 사용할 수 있도록 지원 T..
AOP(Aspect Oriented Programming)가 필요한 상황 - 모든 메서드의 호출시간을 측정하고 싶다면?? 문제 시간을 측정하는 기능은 핵심 관심 사항이 아님. 시간을 측정하는 로직은 공통 관심 사항 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움 시간을 측정하는 로직을 별도의 로직으로 만들기 어려움. 또 변경할 땐 또 모든로직 찾아가면서 변경해야함. -> 이런 문제를 해결하기 위한게 AOP 공통관심사항과 핵심관심사항을 분리 적용할 곳에 지정 해줌. @Aspect @Component public class TimeTraceAop { @Around("execution(* hello.hellospring..*(..))") public Object execute(Proceeding..
JPA는 기존 반복코드도 줄여주고, 기본적인 sql문도 jpa가 직접 만들어서 실행해준다. JPA사용시 sql과 데이터중심 설계에서 객체 중심의 설계로 패러다임 전환할 수 있다. JPA사용시 개발 생산성을 크게 높일 수 있다. JPA -> 자바진형의 표준인터페이스 구현해서 씀. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' build.gradle에 라이브러리 추가.(기본적으로 jdbc도 포함) spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none properties에서 설정 추가 1. jpa가 날리는 sql을 볼 수있음. 2. 객체를 보고 테이블도 만듦. but table..
순수 JDBC -> DB시간에 해봤던 과제 같다.... JDBC template: spring이 중복을 제거해 JDBC의 (편리하게 가능) JPA라는 기술이 쿼리를 다 날려주는. 스프링 데이터 JPA (jpa를 편리하게 쓸수있게 감싼 기술) h2 database 사용 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ); 자바에서는 Long 이지만 DB에서느 bigint 타입. generated by default as identity -> 값세팅하지 않고 인서트하면 db가 자동으로 ID값을 채워줌. impl..
회원 등록 기능 package hello.hellospring.controller; public class MemberForm { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 1. 컨트롤러에 MemberForm을 만들 이유가 있나요? -> 사실 컨트롤러에 MemberForm 대신에 Member를 그대로 받아도 기술적인 문제는 없습니다. 다만 지금은 예제이지만, 실무에서는 컨트롤러에 넘어오는 정보가 Member가 필요한 데이터 이상으로 많은 데이터들이 들어옵니다. 예를 들어서 회원 정보 뿐만 아니라 약관 정보도 들어오고, 화면을 처리하기 위..
@Controller public class MemberController { } @controller 지정시 생기는일 1. spring 시작시 spring container라는 통이 생김. 2. @Controller 어노테이션이 있으면 MemberContoller 객체를 생성해서 넣어둠. 3. 스프링이 관리 -> 스프링컨테이너에서 스프링 빈이 관리된다 라고 표현. @Controller public class MemberController { private final MemberService memberService = new MemberService(); } 처음에 MemberController에서 MemberService 를 가져와서 써야됨. new를 통해 객체를 생성해서 사용할 수 있음. But 여..
비즈니스 요구사항 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 핵심 비즈니스 로직 구현(ex: 회원중복가입X) -> 비즈니스적인 용어사용하기 리포지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리 -> 기계적인, 개발적인용어선택 도메인: 비즈니스 도메인 객체 예)회원, 주문, 쿠폰 등등 주로 DB에 저장하고 관리됨 회원리포지토리 -> interface로 설계 why?? 아직 DB선정 X 우선 메모리 구현체로 만듦 향후에 구체적 기술이 선정되면 바꿀거임 따라서 인터페이스를 사용 Optional java8에들어간기능 Null이반환될때 처리방법 -> Optional을 많이사용 감싸사 반환하면 클라이..
함수 오버로딩 함수의 이름은 동일 매개변수의 type, 갯수가 다름 return type은 관계없음 연산자 오버로딩 C++ 은 다양한 연산자 오버로딩 가능 >>,
복사 생성자 다른 객체(같은 클래스)를 이용해서 새로운 객체를 초기화 암시적(implicit) 복사 생성자 코드에 복사생성자가 없는 경우, 컴파일러가 암시적 복사생성자를 자동생성 암시적 복사 생성자는 얕은 복사를 수행 얕은 복사?? 각멤버값을 복사해서 넣음. 얕은 복사의 문제점 -> 안에 포인터형 변수가 동적메모리를 가리킨다면 주소만 바뀌어 별도의 메모리공간이 아닌 같은 메모리 공간을 가리키게 되는 문제점 발생 따라서 직접 복사생성자를 만들어 깊은 복사를 수행하여야함.
String class 키보드 입력 Cstyle: cin.getline(배열주소, 크기, 구분자) C++style: getline(cin, string class, 구분자) string 함수 string base = "Hello" 문자열의 크기 base.size(), base.length() 문자열 추가 base.append("Word") 할당된 메모리의 크기: base.capacity() 값 추출: base.at(index) 검색함수 : base.find(문자열, index) index부터 문자열 찾아서 첫번째 위치 리턴 검색함수: base.replace(index, 원래있던 문자열의 길이, 바꿀문자열) 문자연산자: >, >=, == 슬라이싱: substr(index, 크기) -> index 부터 크기..
LTSGOD
'분류 전체보기' 카테고리의 글 목록 (11 Page)