목록Spring Boot (37)
DevKim
🏃CH.05 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현🏃 * TODO : 리팩토링 * IndexController에서 세션값을 가져오는 부분, 즉 (SessionUser) httpSession.getAttribute ~ 부분은 다른 컨트롤러나 메소드에서 세션값이 필요할 때마다 반복되는 코드로, 개선이 필요한 나쁜 코드이다. 이를 메소드 인자로 세션값을 바로 받을 수 있도록 변경하는 부분은 지금 단계에서 이해하기 어려운 부분이 있기 때문에 나중에 todo로 남겨두겠다. https://console.cloud.google.com/ Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts...
🏃CH.04 머스테치로 화면 구성하기🏃 이 책에서 머스테치를 사용하는 이유는 다음과 같다고한다. 1. 문법이 다른 템플릿 엔진보다 단순하며 2. 로직 코드를 사용할 수 없어, View의 역할과 서버의 역할이 명확하게 분리될 수 있고 3. .js / .java를 2가지가 다 있기 때문에 하나의 문법으로 클라이언트/서버 템플릿을 모두 사용가능하다 머스테치는 플러그인을 사용할 수 있고, build.gradle에 의존성을 추가해주면 바로 사용할 수 있다. 간단한 기본 페이지를 만들고 머스테치와 API가 잘 작동이 되는지 테스트를 해보자. - index.mustache 스프링 부트로 시작하는 웹 서비스 -IndexController 테스트 @RunWith(SpringRunner.class) @SpringBootT..
🏃 CH.03 🏃 3장부터는 하나의 게시판 페이지를 만들어보고, 7장에서 10장까지는 이 서비스를 AWS 무중단 배포하는 것까지 진행한다. 📌 Role #1 기본적으로 Builder 패턴을 사용한다. 📌 Role #2 Setter를 사용하지 않고, 기본적으로 생성자를 통해 값을 채우고, 값 변경이 필요한 경우엔 명확하게 그 목적과 의도를 나타낼 수 있는 메소드를 추가한다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Posts { //id,title.content,author 생략 ... @Builder public Posts(String title, String content, String author) ..
오늘 드디어 이동욱님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책을 읽을 수 있는 시간이 생겼다. 이전에서도 Test code 작성시 Junit4가 익숙했는데, 이 책에서도 Junit4를 사용한다고해서 다행이라고 생각했다. 현재 버전 이슈가 많은 것 같은데, 패키지에 대해 잘 알고있다면 어렵지 않게 고칠 수 있는 에러들인 것 같다. 🏃 CH.01 🏃 우선 Junit4를 사용하기 위해선 아래를 build.gradle에 추가해주어야한다. //JUnit4 추가 testImplementation("org.junit.vintage:junit-vintage-engine") { exclude group: "org.hamcrest", module: "hamcrest-core" } 모든 책의 기본인 hell..
🏃 구현 기능 🏃 - 상품 주문 - 주문 내역 조회 - 주문 취소 [ 주문 도메인 생성 메서드 추가 ] 비즈니스 로직이 가장 복잡한 주문 도메인 부분이다. 📌 01. 주문 생성 메서드 만들기 생성자로 생성할 수도 있지만, 정적 팩토리 메서드를 사용함으로써 더 효과적으로 코드를 짤 수 있다. 정적 팩토리는 그 유명한 이펙티브 자바 첫장에 나오는 이야기이다. 자세한건 다음에 정리를 해봐야겠다. 도메인 주도 개발으로 실습을 진행하고 있기에, 해당 데이터가 있는 부분에서 비즈니스 로직을 해결한다. @Entity @Getter @Setter @Table(name = "orders") public class Order { @Id @GeneratedValue @Column(name = "order_id") priva..
🏃 구현 기능🏃 1.상품 등록 2. 상품 목록 조회 3. 상품 수정 [ 상품 엔티티에 비즈니스 로직 추가 ] - 상품 엔티티에 주문에 따른, 재고 수량을 늘리고 줄여보고 예외처리를 발생 도메인 주도 설계시, 엔티티 자체에서 해결할 수 있는 것들은 엔티티 안에 비즈니스 로직을 넣는게 더 좋고, 응집도가 있고 객체지향적이다. 📌1. 재고 수량 추가 📌2. 재고 수량 감소 ( 수량이 0보다 작을 시, 오류가 발생해야한다 ) @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter public class Item { ... /** * todo : 비즈니스 로직 * ..
본 포스팅엔 '김영한님의 실전 스프링 부트와 JPA 활용 1편'의 내용이 포함되어있습니다. 이번 실습은 연관관계의 모든 매핑관계를 다뤄보고, Data JPA를 사용하지 않고 JPA를 사용하여 원리를 이해하고 간단한 기능을 최적화하는데에 맞춰져있다. 요구사항을 보고 스스로 엔티티와 테이블 설계를 하고 난 후, 영한님이 구현하신 자료들을 보고 비교해나가는 방식으로 학습을 진행 할 예정이다. 개발 순서는 다음과 같다. Entity 설계 - Entity 개발 - Service,Repository 개발 - Test code 작성을 통한 검증 - 웹 계층에 적용 도메인 주도 개발(DDD)방식 사용 [ Entity & Table 설계 ] diagram 생성 툴은 아래의 사이트를 이용했고, 실습 진행을 위해 테이블명이..
[ Transaction remind ] username과 id만 가지고 있는, 단순한 Member 객체를 만들고 Test code를 생성하여 돌려보았을 때 에러가 터졌다. 왜일까? @RunWith(SpringRunner.class) @SpringBootTest class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test public void testMember() throws Exception{ //given Member member= new Member(); member.setUsername("memberA"); //when Long saveId = memberRepository.save(member); Member ..