본문 바로가기

springboot8

YSit [14] - 관리자 페이지 구현 & 권한 구현하기 관리자 권한 처리에 대해 한 가지 고민이 있었다. 3가지 선택지가 있었는데, 첫번째로 한 페이지에서 관리자인지 유저인지 판단하도록 코드를 짜는 것이었고, 두번째는 똑같은 페이지를 두 개로 만들어서 각각 유저, 어드민 페이지를 만드는 것이었다. 세번째는 따로 관리자 프로그램을 만드는 것이었다. 처음 기획하고 설계할 땐 1안을 할 생각으로 설계를 했었는데, 이게 지금 와서 조금 생각을 해보니 웹에서도 관리자인지 유저인지 판단해야하고, 컨트롤러쪽에서도 판단을 해야하는데 이게 좀 구현에 어려움이 있었다. 오히려 코드 중복이 많아지는 2안보다 코드가 더 번잡해질 것 같아서 포기했다. 그래서 2안과 3안 중에서 조금 고민을 했었는데, 3안은 프로그램을 다운 받아서 관리를 해야하는데, 만약 학생에게 파일이 들어갈 수.. 2022. 12. 31.
YSit [13] - 댓글 기능 구현하기 댓글 테이블 구성에 조금 문제가 있어서 수정했다. 댓글은 기본적으로 자식이 하나만 있는게 아니라 무한적으로 생성이 가능하기 때문에 이를 생각하여 설계를 해야한다. 댓글 테이블의 게시물ID, 작성자(유저)ID, 부모ID, 내용 컬럼은 유지하고, ref(group), step(level), refOrder를 새로 추가해주었다. 이론적으로 설명을 해보자면 ref 컬럼은 부모가 없는 댓글을 기준으로 그룹화를 시켜서 댓글 리스트를 출력할 때 다른 댓글이 있더라도 부모 댓글 밑에 출력이 되도록 한다. step 컬럼은 쉽게 말해 그룹 내에서 단계를 나누는 컬럼이다. 댓글 그룹 안에서도 순서를 나누어야 하기 때문에 그룹 내의 그룹 느낌이다. 마지막 refOrder 컬럼은 단순히 그룹 내의 순서를 표시하는 컬럼이다. [.. 2022. 12. 30.
YSit [11] - 게시물 작성 / 목록 기능 구현 유저 기능은 어느정도 구현이 끝났으므로 게시판 기능을 구현을 시작했다. 먼저 게시판 카테고리가 테이블로 만드는 것보다 Enum타입으로 구현하는게 더 편해보이고, 추가적으로 카테고리를 생성할 수 있어서 테이블이 아닌 Enum타입으로 바꿨다. [ 게시물Repsitory 생성 ] @Repository와 @RequiredArgsConstructor 어노테이션을 선언해준다. ( 자세한 설명은 이전 글들 참고 ) 엔티티 저장을 위해 엔티티를 파라미터로 받고 엔티티매니저가 persist해주는 메서드를 만들어준다. 그리고 전체 리스트 구하는 메서드, 게시물Id 기준으로 게시물 하나 구하기, 제목 기준, 내용 기준으로 검색하기 메서드를 만들어준다. 제목 기준, 내용 기준으로 검색은 유사한 형태로 검색해도 게시물이 나와야.. 2022. 12. 28.
YSit [10] - 세션 사용하여 쿠키 대체하기 홈화면에 유저 아이디를 띄우려고 했는데 왜인지 쿠키값이 홈화면에는 안 들어오는 오류가 생겼다. 로그인 전과 로그인 후를 기준으로 HTML을 나눠보기도 하고, 코드에 잘못된 부분이 있나 세세히 살펴보기도 했는데 고쳐지지 않고 아무리 구글링을 해도 이 오류에 대한 정보가 안 나와서 세션을 사용해보기로 했다. 세션은 쿠키보다 무겁긴 하지만, 보안성이 높아서 나중에 사용해보려 했는데 그 나중이 지금인 것 같다. [ 세션 생성 ] 세션도 쿠키를 기반으로 하기 때문에 사용 방법이 그다지 다르지 않다. 먼저 HttpServletRequest를 파라미터로 받아준다. HttpServletRequest.getSession()은 이미 생성된 세션이 있다면 세션을 반환, 없다면 새로운 세션을 생성하여 반환한다. 이 메서드를 .. 2022. 12. 28.
YSit [7] - UserController 개발하기 기능 구현의 마지막이라고 할 수 있는 컨트롤러를 개발한다. UserController 클래스를 생성한다. 그리고 강의에서 컨트롤러에서는 직접 엔티티를 만들지 않고 DTO나 폼 형태로 따로 만들어서 사용하는게 좋다고 하셔서 나도 UserForm 클래스를 따로 만들었다. 유저 컨트롤러에서는 컴포넌트 스캔으로 스프링 빈에 등록하도록 @Controller와 생성자 주입을 자동으로 해주는 @RequiredArgConstructor를 선언해주고 로깅을 위해서 @Slf4j도 선언해주었다. 회원가입부터 만들기 시작했다. 먼저 Get방식으로 받은 다음에 model에 UserForm 객체를 넣어준 후 웹에 넘겨줬다. 그러면 thymeleaf를 이용해 값을 입력받도록 했다. 먼저 처음에 thymeleaf를 사용할 것이라고 .. 2022. 12. 24.
YSit [6] - 유저 기능 테스트하기 테스트 코드를 작성할 클래스를 하나 만들어주고 테스트를 진행하기 위해서 @SpringBootTest와 @RunWith 어노테이션을 사용했다. 그리고 데이터 변경이 일어나는 부분이기 때문에 @Transcational을 넣어주는데, 트랜잭션 어노테이션은 @Test가 붙어있는 메서드에서는 테스트 진행 후 데이터 롤백을 해준다. 테스트 필요 메서드 1. 중복체크 2. 회원가입 3. 아이디&비밀번호 매치 4. 비밀번호 암호화 중복체크 메서드는 회원가입 과정에도 있기 때문에 회원가입 메서드만 진행해도 되긴 하지만 만약의 상황을 대비하기 위해서 따로 테스트 코드를 작성하기로 했다. 중복체크 메서드를 작성하기 전에 @Test 어노테이션을 달아주고 메서드를 만든 후, 테스트 값을 넣으려고 했는데 문제가 생겼다. 전에 도.. 2022. 12. 24.