분류 전체보기 512

Spring IoC/DI

테코톡 스터디 : Spring IoC/DI 10분 테코톡을 시청하고 작성하였습니다. 영상링크 참고용 : 이전에 영한님 강의듣고 정리해놓은 IoC/DI 스프링의 대 삼각형 스프링의 가장 밑바탕이 되는 3가지 IoC/DI ==> 가장 기본 AOP PSA IoC / DI Spring Framework의 근간 Object의 생명주기와 의존관계에 대한 프로그래밍 모델 유연하고 확장성이 뛰어난 코드를 만들 수 있게 해주는 프로그래밍 모델 "토비의 스프링"에서 발췌 관심사의 분리 유연하고 확장성이 뛰어나다. (= 변경이 있을 때 수정이 쉽다.) (= 수정할 부분만 수정하면 된다.) (= 관심사의 분리가 잘 이루어졌다.) 전략 패턴(Strategy Pattern) 관심사의 분리를 잘 설명할 수 있는 패턴 객체들이 할 ..

테코톡 스터디 2021.07.13

Validation

폼 입력으로 들어오는 데이터를 검증하고 만약 오류가 발생했을 때 오류 페이지를 보여주는 것이 아닌 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 고객에게 알려주어야한다. 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지를 검증하는 것이다. 클라이언트 검증은 조작이 가능하다. ==> 보안에 취약 그렇다고 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용해야함. API 방식을 사용해서 검증 오류를 API 응답 결과에 남겨주는 것도 좋은 방법 1. 검증 직접 처리 서버에서 검증 실패가 발생하면 Form에 입력된 데이터와 검증 오류에 대한 결과를 Model에 담아 다시 상품 등록 Form으로 보내준다. 이런 오류 페이지가 띄워지는 것이 아닌 입력한 데이터는 그대로..

Spring/Spring MVC 2021.07.07

메시지, 국제화

메시지란? 만약 상품명이라는 라벨을 상품이름으로 변경하자는 요구사항이 들어왔다고 가정해보자. 이를 위해선 상품명이라고 코딩되어 있는 모든 부분을 찾아서 상품이름으로 고쳐야할 것이다. HTML 파일에 메세지가 하드코딩되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하는 기능을 메시지 기능이라고 한다. "message.properties"라는 메세지 관리용 파일을 만들어 사용하는 것이다.(key-value) item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML은 key값으로 value를 불러와 사용하면 된다. 물론 하드코딩된 현재 상태에서는 모두 찾아고쳐야 하지만 추후에 비슷한 요구사항이 들어왔을 때에는 메시지 관..

Spring/Spring MVC 2021.07.06

협업을 위한 Git Fork와 PR

fork란 다른 사람의 Github Repository를 내 Github Repository로 복제하여 가져오는 기능이다. 우리가 생각하는 포크처럼 찍어서 가져온다고 생각하면 될 것 같다. 이 때 forked된 내 저장소는 원본 저장소(다른 사람의 Github Repository)와 연결되어 있기 때문에 협업이 가능하다. 동작 과정을 풀어서 설명하자면, 1. 다른 사람의 Repository를 Fork하여 내 Repository로 복제한다. 2. git clone을 통해 내 local 환경에 저장소를 내려받는다. 3. local 환경의 작업 branch에서 변경, 추가, 수정을 진행한다. 4. 원본 저장소와 merge하기 위해 pull request를 전달한다. 5. 원본 저장소의 관리자가 pull req..

Git 2021.07.05

Thymeleaf 파헤치기

Tymeleaf 기본 기능 1. 텍스트 - text, utext Controller에서 매핑하는 과정이나 model에 값을 담는 과정은 생략 일반적으로 태그 내부에서 th:text를 사용하는 방식을 많이 사용하고 태그 내부에서 사용하는 것이 아니라 컨텐츠 안에서 직접 출력을 하고 싶을 때는 위와 같이 [[...]] 대괄호 사이에 모델에 담긴 값을 넣어준다. 참고 : Escape HTML 문서는 같은 특수 문자를 기반으로 정의된다. 따라서 뷰 템플릿으로 HTML 화면을 생성할 때는 출력하는 데이터에 이러한 특수 문자가 있는 것을 주의해서 사용해야 한다. 태그를 사용하여 문자를 강조하고 싶어 위와 같이 코드를 작성하였다면 어떻게 될까? 의도와는 달리 태그가 적용되지 않고 그대로 출력되는 것을 확인..

Spring/Spring MVC 2021.07.01

검색 기능 만들기(동적쿼리) - Querydsl 사용

현재 Spring Security를 사용하여 로그인, 로그아웃을 구현한 상태이고 인증(로그인)하지 않은 사용자는 게시판에 접속할 수 없도록 구현해놓았다. Controller 파라미터로 page(페이징 변수), category(카테고리별 조회), myPost(내 게시물 보기), searchDto(검색창)를 받는다. 1. page page는 defaultValue를 0으로 설정하였기 때문에 값을 설정하지 않으면 0페이지부터 보여준다. 만약 다음 페이지 버튼을 누르게 되면 현재 페이지에서+1을 한 값이 page 변수에 담기고, 이전 페이지 버튼을 누르면 현재 페이지에서 -1을 한 값이 담긴다. 2. category required 속성을 false로 지정해놓았기 때문에 category 값을 주지 않으면 nul..

중급 문법

1. 프로젝션과 결과 반환 1-1. 프로젝션과 결과 반환 - 기본 프로젝션 : select 대상을 지정 프로젝션 대상이 하나 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 둘 이상이면 튜플이나 DTO로 조회한다. 튜플 조회 "com.querydsl.core.Tuple" 리스트의 타입이 Tuple형식으로 반환된다. 데이터를 사용할 때는 get()을 사용하여 값을 꺼낸다. 1-2. 프로젝션 결과 반환 - DTO 조회 (중요!!) JPA에서 DTO를 조회할 때는 new 오퍼레이션을 사용하는데, DTO의 패키지명을 다 적어줘야해서 매우 지저분해지고 생성자 방식만 지원한다는 단점이 존재한다. Querydsl 빈 생성 - 프로퍼티 접근 - 필드 직접 접근 - 생성자 사용 먼저 프로퍼티 접근을 사용하는 방..

Spring/Querydsl 2021.06.29

로그인한 사용자 정보 받아오기

Spring Security를 사용하여 로그인, 로그아웃을 구현해놓았다. 또한 회원 가입시에 Spring Security를 통해서 비밀번호를 암호화하여 저장하도록 하였다. 초기버전에서의 새로운 게시물 작성은 Member 엔티티를 추가하기 이전이였기 때문에 작성자를 직접 입력하는 식으로 구현되었다. 하지만 현재 Member 엔티티를 추가하여 로그인, 로그아웃을 구현해놓은 상태이기 때문에 Authentication 객체를 사용하여 세션 정보를 가져와 작성자를 고정시키는 방식으로 변경하였다. 게시물을 작성하면 세션 정보를 가져와 작성자는 disabled Authentication를 파라미터로 받아 위와 같이 사용하였다. 스프링 시큐리티를 처음 사용해보았는데 굉장히 성숙도가 높은 부분인 것 같아 추후에 따로 공..

조회수 기능, 페이징, 정렬

현재 게시물 CRUD 기능은 구현이 되어있는 상태이다. 스프링 데이터 JPA를 사용하여 굉장히 편리하게 구현하였다. 조회수 기능 조회수 기능의 구현 로직은 굉장히 간단하다. 그냥 해당 게시물을 조회할 때 조회수 필드를 +1 시켜주면 된다. 프로젝트를 진행할 때에는 Setter를 사용하여 값을 변경하는 습관은 매우 좋지 않은 습관이다. 그 외에 따로 조회수 필드를 변경할 수 있는 메서드를 만들어서 진행하였다. 이는 서비스 계층에서 호출되어 사용된다. JPA의 Dirty Checking 기능을 사용하여 조회수를 1씩 올려주는 식으로 구현하였다. 서비스 계층의 클래스 레벨에서 @Transation(readOnly=true)로 설정해놓고 생성, 수정이 일어나는 메서드 레벨에서 위와 같이 @Transaction을..

반응형