Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JDBC
- api 개발
- 저장소 복제
- 서버 배포
- jar빌드
- git 충돌 해결
- 넘파이
- MVC
- Servlet
- swap 메모리
- 프로그래머스
- JPA
- 페이징 정렬
- JPQL
- 우분투
- HttpServletResponse
- springboot
- Git
- 스프링 이메일 전송
- 스프링부트 OpenAI API
- 값 타입
- Chat GPT
- 비밀번호 재설정 API
- Json 객체
- MySQL
- 두수의 합 자바
- github 복제
- 파이썬
- 자바
- 저장소 이전
Archives
- Today
- Total
현의 개발 블로그
[Servlet, JSP, MVC 패턴] 비즈니스 로직 작성 본문
간단한 회원 관리 웹 애플리케이션을 만들 것이다.
Servlet, JSP, MVC 패턴 순서로 각각 웹 애플리케이션을 만들고
이전 단계의 한계점들을 개선해 나가고자 한다.
먼저 회원을 저장 및 조회하는 핵심 비즈니스 로직 작성하자.
도메인 설계
회원 도메인을 먼저 설계한다.
@Getter @Setter @AllArgsConstructor @NoArgsConstructor
public class Member {
private Long id;
private String username;
private int age;}
Repository 생성
회원을 저장하는 Repository를 생성한다.
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
private static final MemberRepository instance = new MemberRepository();
public static MemberRepository getInstance(){
return instance;
}
private MemberRepository(){}
}
hashMap store 객체로 Member와 id를 저장한다.
필드들을 static으로 설정했기 때문에 MemberRepository 객체가 여러 개 생성되어도 필드값은 하나이다.
private 생성자를 사용해 다른 클래스에서 접근할 수 없도록 한다.
getInstance()를 통해서만 repository 객체에 접근할 수 있기 때문에 싱글톤이 보장된다.
저장, 조회, 삭제 로직을 만든다.
저장될 때마다 id값이 증가되도록 하였다.
public Member save(Member member){
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
public Member findById(Long id){
return store.get(id);
}
public List<Member> findAll(){
return new ArrayList<>(store.values());//store 값들을 꺼내 ArrayList로 반환
}
public void clearStore(){
store.clear();
}
테스트 코드 작성
단축키 commad+shift+T로 간편하게 클래스를 생성할 수 있다.
getInstance()를 통해 객체를 싱글톤으로 가져올 수 있다.
만약 스프링을 쓴다면 싱글톤을 보장해주기 때문에, 아래처럼 작성하지 않아도 된다.
MemberRepository memberRepository = MemberRepository.getInstance();
각 테스트가 끝날 때마다 store 객체를 초기화해주는 코드를 작성한다.
@AfterEach
void afterEach(){
memberRepository.clearStore();
}
저장 테스트
@Test
void save(){
//given
Member member = new Member("hello", 20);
//when
Member savedMember = memberRepository.save(member);
//then
Member findMember = memberRepository.findById(savedMember.getId());
assertThat(findMember).isEqualTo(savedMember);
}
조회 테스트
- 객체 2개를 저장하고 2개가 맞는지 확인한다
- result 리스트 객체가 member1, member2를 포함하고 있는지 확인한다.
@Test
void findAll(){
//given
Member member1 = new Member("member1", 20);
Member member2 = new Member("member2", 30);
memberRepository.save(member1);
memberRepository.save(member2);
//when
List<Member> result = memberRepository.findAll();
//then
assertThat(result.size()).isEqualTo(2);
assertThat(result).contains(member1, member2);
}
Reference
스프링 MVC 1편 - 백엔드 웹 개발 기술
'스프링부트 이론 > MVC' 카테고리의 다른 글
[Servlet, JSP, MVC 패턴] JSP로 웹 어플리케이션 만들기 (0) | 2023.06.20 |
---|---|
[Servlet, JSP, MVC 패턴] 서블릿으로 웹 어플리케이션 만들기 (0) | 2023.06.19 |
[Servlet] HTTP 응답 데이터 (0) | 2023.06.19 |
[Servlet] Http Servlet Response 사용법 (0) | 2023.06.19 |
HTTP 요청 데이터 (0) | 2023.06.19 |
Comments