본문 바로가기

분류 전체보기

(193)
22년 12월 30일 팀프로젝트 설계를 했다. ERD UML다이어그램 기능중에 예외처리와 좋아요를 맡아서 하기로 했다. 예외처리는 쉽게 구현했으나 좋아요는 구상이 잘 되지 않아 팀원들과 토론을 좀 했다. 의견이 갈려서 일단 만들어보고 보여드리기로 했다. 내 의견은 이렇다. 1. post와 comment는 각각 좋아요의 갯수를 가지고 있어야한다. 2.like엔티티에는 어느 post나 comment like인지 어떤 user가 눌렀는지 정보가 저장되어있어야한다. 3.like를 작동시켰을때 user의 중복을 검사하여 user가 존재한다면 post나 comment의 좋아요 갯수를 하나 줄이고, user정보를 삭제한다. 없다면 user정보를 저장하고 좋아요 갯수를 하나 증가시킨다. 이렇게 구상을 했는데 잘 구현이 될지는 모르겠다. 주..
22년12월29일 기존 프로젝트에 시큐리티를 적용하여 인가를 시큐리티에서 하게 만들고, jwt토큰의 유효성을 시큐리티에서 검증 하게 만들었다. 그리고 user DB에 저장되는 비밀번호를 인코딩해 암호화 된 상태로 받아 저장하고, 비교할때도 받은 비밀번호를 암호화시켜 비교하게 하였다. 문제는 강의 코드를 재활용해서 쓴것이기에 작동은 되는데 클래스끼리 어떻게 상호작용하여 작동하지 전혀 이해를 하지 못하겠다. 각 클래스의 코드가 무슨 역할을 하는지는 알겠는데 해당 클래스 자체가 어떤 역할인지는 아직도 제대로 모르겠다. 가장 이해가 안가는 부분이 userdetails와 userdetails service클래스의 역할인데 시큐리티 동작에 대한 전체적인 그림이 이해가 되지 않으니 어떤 역할을 하는지 잘 모르는 것 같다는 생각이 들었..
22년 12월 28일 트랜잭션 트랜잭션에 대해서 공부했다. https://move22.tistory.com/171 Transaction 트랜잭션: 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계 이며 ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가 move22.tistory.com 강의에 나온 코드가 아닌 프로젝트를 진행하며 쓴 코드를 순서도로 그려보았는데, Spring Aop가 있는 경우와 없는 경우의 차이가 확연하게 보였다. 그동안 아무 생각없이 쓰던 @Transactional이 어떤 역할을 하며, 스프링이 웹개발에서 얼마나 개발자를 편하게 해주는지 새삼 알 수 있었다.
Transaction 트랜잭션은 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계 이며 ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 출처 - https://ko.wikipedia.org/wiki/ACID 즉, 트랜잭션은 하나의 최소 단위의 작업에 여러가지 데이터 변경을 넣으면, 모두 저장되거나, 아무 것도 저장되지 않거나를 보장한다. 만약, A계좌에서 B계좌로 20만원을 보낸다고 가정했을때, A 계좌 잔고 200,000 원 이상 확인 A 계좌 잔고: 1,000,000 원 A 계좌 잔고 200,000 원 금액 감소 A 계좌 잔고: 800,000 원 (1,000,000 원 - 200,000 원) B 계좌 잔고 200,000 원 금액 ..
22년 12월 27일 테스트 코드를 작성해 보았다. 이전 프로젝트의 User객체 생성을 시험해보기 위해 테스트 코드를 짜 보았다. 테스트코드를 쓰지 않았다면 스프링 부트를 돌리고, 포스트맨을 켜서 계정생성을 한 후 h2 콘솔에 들어가서 객체가 잘 저장되어있는지 확인해야 할 과정이 매우 짧은 시간만에 끝난 것을 알 수 있다.
22년 12월 26일 정적 팩토리 메서드를 적용해서 Dto를 반환하는 코드를 캡슐화 해보았다. 프로젝트에서 Dto를 반환하는 코드가 반복되었기 때문에 Dto를 반환하는 코드를 캡슐화 하였고, Dto를 반환하는 코드를 캡슐화 하기 위해 적용한 방법은 Dto의 값을 보내주는 엔티티에서 메서드를 통해 Dto로 가공해 보내주고, 서비스에서 받아온 Dto를 반환하는 방식이었다. 바뀐 코드는 다음과 같다. 메서드의 위치는 엔티티에서 Dto로 바뀌었다. 일단 기존 메서드를 만들때 실수 한 것이 있다. Dto를 반환하는 코드인데 엔티티에 메서드가 있었다는 점이다. 메서드를 호출하려면 인스턴스가 생성되어 있어야 하는데, Dto에 메서드를 생성하면, Dto 메서드를 사용하기 위해 Dto의 인스턴스를 생성하야한다. 그러면 코드도 지저분해지고, ..
17주차 개발일지 진행한 프로젝트에 swagger를 추가하고, 커스텀 익셉션을 추가했다. 커스텀 익셉션을 만들면서 익센션 클래스가 너무 많아지는 것에 대해 고민했는데, 생각해보니 특정 익센션에 대한 커스텀 익셉션이 아니라 IllegalArgumentException을 띄웠을때 상황에 따라 다른 메세지가 나오게 하고 싶었기에 그만큼 클래스가 생길수 밖에 없었다. 물론 프로젝트를 진행하다 무슨 익셉션이 뜨는지 알아보기 번거로워 IllegalArgumentException을 너무 남발한 감이 있긴하다. 이는 리팩토링이 필요한 부분이라고 생각한다. 그리고 인증/인가 분리도 진행했다. 기존에는 계정이 관리자 계정인지 서비스에서 검증해서 관리자 계정인경우, 글을 쓴 계정이 아니더라도 수정하거나 삭제 하게 했는데, 아예 컨트롤러에서 ..
정규화 정규화의 목적은 중복 데이터를 없애고 관계를 단순하게 가지게 하는 것이다. 제1정규화: 원자성 원자성은 테이블의 컬럼이 원자값, 즉 하나의 값만 갖도록 테이블을 분해하는 것이다. 제2정규화: 완전 함수적 종속 (부분 종속 제거) 제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다. 완전 함수 종속이란 것을 봤을때 용어만 놓고 보면 이해가 되지 않는다. 일단 완전 함수적 종속은 기본키가 복합키일때 적용해야하는 것으로 이해하고 표를 그려보았다. 사이트 영화이름 장르 평점 네이버 아바타:물의 길 SF 8.8 다음 아바타:물의 길 SF 7.9 다음 영웅 드라마 8.9..
논리적모델링,물리적 모델링 3. 논리적 모델링 논리적 모델링: ER다이어그램을 사용하여 관계 스키마 모델을 만드는 과정 4. 물리적 모델링 물리적 모델링: 관계 스키마 모델의 물리적 구조를 정의하고 구현하는 과정
개념적 모델링 개념적 모델링: 개체와 개체들 간의 관계에서 ER다이어그램을 만드는 과정이다. ER모델: 세상의 모든 사물을 개체(Entity)와 개체 간의 관계(Relationship)으로 표현한다. 인데 용어로만 보니 역시 이해하기 힘들다. 그림으로 나타내보자면 이렇게 그릴수 있다. 또한 새발 표기법이라는 것이 있는데, 관계의 의미나 제약조건 등을 개체 타입들을 연결하는 실선 위에 몇 가지 기호를 사용하여 표현하는 표기법이다. 이 방법을 내가 과제로 진행했던 프로젝트에 적용해서 그려보면 이렇게 나온다. User개체는 Post와 Comment개체에 반드시 존재해야하지만, User개체는 Post개체와 Comment개체를 한개 가지거나, 여러개 가지거나, 가지지 않더라도 존재한다. 즉, 1:0 or 1:1 or 1:N관계..