철학과 학생의 개발자 도전기

[Spring] 스프링 입문 - 섹션 3. 회원 관리 예제 - 백엔드 개발 본문

Spring

[Spring] 스프링 입문 - 섹션 3. 회원 관리 예제 - 백엔드 개발

Younghun 2022. 10. 2. 00:01

비즈니스 요구사항 정리

이번 예제는 스프링부트에 대한 이해를 돕기 위한 것이므로 요구사항은 최소한으로 정했다.

- 데이터: 회원ID, 이름

- 기능: 회원 등록, 조회

- DB: 미정

 

웹 애플리케이션 구조는 다음 이미지를 따른다.

도메인은 비즈니스에서 사용되는 객체를 의미하고, 리포지토리는 이러한 객체를 DB에 저장 및 관리하는 역할을 한다.

 

 

 

회원 도메인과 리포지토리 만들기

이제 직접 코드를 작성하여 도메인과 리포지토리를 만들 것이다.

hellospring폴더에 domain패키지를 만들고 Member클래스를 정의한다.

데이터는 간단히 id와 name 두가지뿐이다. 이 둘은 private 변수이기 때문에 getter, setter를 이용해서 접근해야한다.

 

 

그 다음은 리포지토리 인터페이스를 작성했다.

hellospring폴더에 repository패키지를 만들고 MemberRepository인터페이스를 만든다.

구현할 기능은 4가지이다. save는 회원등록, find는 회원찾기이다. Optional은 null값이 가능할 때 null값 대신에 보내려고 사용한다고 한다. 보통 null 값이 전달되면 안 좋은 상황에서 사용되는 것 같다.

 

 

그 뒤 임시로 사용할 리포지토리를 만들었다.

그리고 인터페이스에서 명시한 기능들을 실제로 작성했다. id는 sequence에 의해 자동으로 생성된다.

 

 

회원 리포지토리 테스트 케이스 작성

이제 작성한 코드를 실제로 테스트해보면서 잘 작동하는지 확인해야한다.

그러기 위해서 테스트 코드를 작성한다. 그러나 테스트 코드가 실행할 때는 순서에 상관없이 실행되기 때문에 하나의 테스트가 끝나면 관련 데이터를 지워주도록 작성해야한다.

 

이런 식으로 테스트 코드를 작성하고 실행시키면 된다.

테스트 성공!

 

 

회원 서비스 개발

이제 비즈니스 로직을 코드로 구현해보자.

hellospring에 service 패키지를 만들고 MeberService 클래스를 만든다. 여기서 우선 join이라는 회원가입 기능을 간단히 구현해보았다. 중복회원검사는 메소드로 따로 만들어서 모듈화했다. Optional클래스는 ifPresent 메소드를 활용해서 null값을 간단히 확인할 수 있다.

 

 

서비스는 비즈니스에 의존적으로 설계해야하며 실제 비즈니스 용어를 사용해서 개발하는 것이 좋다.

 

 

회원 서비스 테스트

이제 만든 서비스를 테스트하면 된다. 테스트는 ctrl+shift+t 단축키를 이용하면 빠르게 틀을 만들 수 있다.

 

 

테스트 코드는 직관성을 위해서 한글로 작성해도 무방하다.

그리고 given - when - then 의 형식을 따르면 더 체계적인 테스트 코드를 작성할 수 있다.

테스트 성공!

 

 

테스트 케이스는 정상적인 상황보다 예외적인 상황을 잡는 것이 더 중요하다. 문제는 주로 예외적인 상황에서 발생하기 때문이다.

중복회원이라는 예외를 잘 잡는 것을 확인했다. 하지만 try-catch문 말고 더 간단한 방법이 있다고 한다. assertThrows를 쓰는 방식이다.

 

 

테스트 성공!

 

 

이외에도 DI(의존성 주입)을 간단히 짚고 넘어가셨는데 다음 시간에 더 자세히 알려준다고 하신다.

 

 

섹션 3 마무리

이번 섹션에서는 백엔드 개발의 기초인 회원관리기능을 간단히 구현해보았다.

배우면서 가장 중요하다고 느낀 것은 서비스-리포지토리-도메인과 관련된 계층구조이다. 그 구조를 바탕으로 소프트웨어를 설계하는 것이 스프링을 잘 활용하는 방법같다.

 

다음 섹션에서는 스프링 빈과 의존관계에 대해 배운다.

둘 다 무슨 말인지 모르겠지만 강의를 수강하고 잘 이해할 수 있으면 좋겠다. 화이팅!