온라인 서점 API 만들기로 살펴보는 Spring Boot OOP 4 Step-04 회원가입 Service 만들기 : 응용영역 효율적으로 관리하기 - Part1 응용 영역(서비스) 이 단계에서는 회원가입 기능을 구현하면서 응용 영역을 어떻게 하면 응집력 있고, 변경에 유연한 코드를 작성할지에 대해 알아볼 것입니다. 크게 아래와 같은 주제로 응용영역을 효율적으로 관리하는 방법에 대해 알아보겠습니다. (소프트웨어에서 변경이 유연하고, 확장가능한 코드는 아주 핵심적인 부분입니다.) 서비스크기 요구사항 정리 및 초난감 회원가입 Service 구현 캡슐화 1. 서비스크기 드디어 회원가입을 하기 위한 signUp 서비스를 구현할 차례입니다. 먼저 회원가입 서비스 기능을 구현하기 전에 회원가입 서비스를 어느 정도의 ..
Step02 - 회원 엔터티 정의 1. 회원 엔터티 정의 먼저 앞에서 설계 테이블을 간단히 보겠습니다. 다음과 같은 member 테이블이 있었습니다. 회원을 가입시키기 위해서는 member 엔터티를 정의해야할 필요가 있습니다. 위 그림 테이블을 기반으로 Member 엔터티를 정의해볼것입니다. @Entity @Table(name = "member") @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Member { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Embedded private Email ema..
Step01 - 프로젝트 설계 및 프로젝트 생성 이장에서는 아래의 내용을 중점으로 살펴볼 것 입니다 어떤 서비스를 만들것인가. 도메인구조, 테이블구조 프로젝트구조 Spring boot 프로젝트 생성 1. 어떤 서비스를 만들것인가. 온라인 서점에서 한번에 여러개의 책을 주문할 수 있는 주문 시스템 API 서비스 구축 간단히 말하면 위 소제목과 같은 간단한 API 서버를 만들 것입니다. 좀 더 상세히 말하면 아래와 같을 수 있습니다. 책을 주문하기 위해서는 Spring boot 온라인 서점 회원이어야 합니다. 회원은 여러 개의 주문 신청을 할 수 있습니다. 주문을 할 때 한 번에 여러 개의 책을 주문할 수 있습니다. 책은 여러 주문의 의해 주문될 수 있습니다. 주문이 완료된 이후에 배송이 시작됩니다. 배송을..
Euqals, Hashcode 메소드에 대해 알아보자. 먼저 equals 메서드와 hash code가 왜 필요한지를 간단하게 알아보자. 만약 아래처럼 member1객체와 member2객체를 선언하고 객체를 비교했을 때 true 값을 받을 수 있을까 ?? 그렇다.. 너무 쉬운 질문이었다. 답은 당연히 false 일 것이다. 그 이유는 둘은 동일 객체가 아니기 때문이다. public class Test { public static void main(String[] args){ final Member member1 = new Member("1"); final Member member2 = new Member("1"); System.out.println(member1 == member2); // false Sy..
시작하며 컬렉션에 대한 내용을 정리하게 된 계기는 먼저 자바 Collection 만의 API 기능을 효율적으로 사용하기 위해서이다. 다음은 자료구조를 적극적으로 활용하기 위해서이다. 자료구조를 이용하면 훨씬 효율적으로 데이터들을 관리할 수 있고 심지어 코드의 가독성 또한 좋아지기 때문이다. 가독성이 안 좋아지고 복잡함을 증가시키는 IF 문을 피하는 코드를 만드는 것은 아주 효율적인 코딩이라고 생각한다. 예를 들어, List에 있는 이메일들을 중복 검사한다고 했을 때 단순하게 생각하면 List를 Email 숫자만큼 loop를 돌려 Email을 중복 검사하는 방법이 있을 수 있다. 하지만 HashSet, TreeSet을 이용하면 중복된 값이 저장이 되지 않기 때문에 좀 더 효율적으로 데이터를 관리하고, 소스..
토비의 스프링 이글은 토비님의 스프링책을 보고 요약한 내용입니다 테스트 스프링이 개발자에게 제공하는 가장 중요한 가치가 무엇이냐고 질문한다면 그것은 객체지향과 테스트라고 한다. 엔터프라이즈 앱은 변화가 계속해서 일어난다. 이런 변환에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI같은기술이다. 두번째 전략은 만들어진 코드를 확실할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다. 2.1 UserDaoTest 다시 보기 테스트의 유용성 테스트 코드를 작성하게 되면 자신이 작성한 코드가 제대로 작동하는지 확인할 수 있다. 이를 통해 코드의 결함(의존성)을 제거해가는 작업, 디버깅을 거치게 되고 최종적으로 테스트가 ..
EntityManagerFactory, EntityManager, PersistenceContext란? EntityManagerFactory란 데이터베이스를 하나만 사용하는 애플리케이션들은 일반적으로 EntityManagerFactory를 한개만 생성한다. 이 엔터티 매니저 팩토리로 엔터티 매니저를 생성할 수 있다. EntityManagerFactory는 Thread Safe해서 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드간에 공유해새 사용한다. EntityManagerFactory 정리 Hibernate에서는 SessionFactory(EntityManagerFactory) 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하다.(thread-safe) EntityManager를 ..
String, StringBuffer, StringBuilder 차이 String String 클래스는 변경이 불가능한 immutable 클래스이다. String 클래스를 사용하여 String의 문자열을 추가할 때 기존 할당된 메모리 힙영역에 문자열을 수정할 수 없다. 예를 들어 String 문자열에 +를 하여 문자열을 추가 할경우에 내부적으로 새로운 객체를 생성하게 된다. String data = "ABC"; data += "DEF"; 예를 들어 "ABC" 에 "DEF"가 추가되었기 때문에 한개의 String 객체가 사용되었다고 생각할 수 있지만, String 객체는 내부 데이터를 수정할 수 없으므로 새로운 객체를 생성하여 기존 data변수에 새로 생성된 String 객체를 생성한다. 아래는 그림으로 ..
- Total
- Today
- Yesterday
- Collection
- #linux
- HMAC
- IntelliJ
- kotlin
- tobi
- java
- Chache
- Spring
- SSH
- Quasar
- vue
- jenkins #mac방화벽
- network
- batch
- https
- Linux
- OAuth
- JPA
- Github
- Angular
- Gradle
- javascript
- eslint
- aws
- OS
- Jenkins
- Infra
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |