전체 글153 [Project] DTO 설계 이번글은 DTO설계를 해보겠습니다. DTO가 무엇인지 알아보고 설계를 해보도록하겠습니다. DTO란? Data Transfer Object의 약자로, 계층간 데이터 교환을 위한 자바빈즈를 뜻한다. 여기서 말하는 계층은 컨트롤러, 뷰, 비즈니스 계층, 퍼시스턴스 계층을 말하며 각 계층간 데이터 교환을 위한 객체를 DTO또는 VO라고 부릅니다. DTO는 VO(Value Object)와 용어를 혼용해서 많이 사용하는데, VO는 읽기만 가능한 read only 속성을 가져 DTO와의 차이점이 존재한다. - DTO는 로직을 가지지 않는 데이터 객체이고 getter/setter메소드만 가진 클래스를 의미한다. - DTO(Data Transfer Object)는 데이터 전송(이동) 객체라는 의미를 가지고 있다. - 계.. Project/project-board 2022. 7. 14. [Project] QueryDSL 적용 저번 글에 API 설계까지 하였습니다. 하지만 기본적인 API는 Srping Data Rest가 자동으로 생성해줬지만 검색 기능은 구현해주지 않습니다. 지금부터 이 검색 기능을 QueryDSL을 사용하여 구현해보도록 하겠습니다. QueryDSL @Query("select a from Article a where a.id = :id") Article findByID(@Param("id") Long id); Spring Data JPA가 기본적으로 제공해주는 CRUD 메서드 및 쿼리 메서드 기능을 사용하더라도, 원하는 조건의 데이터를 수집하기 위해서는 필연적으로 JPQL을 작성하게 됩니다. 간단한 로직을 작성하는데 큰 문제는 없으나, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 상당히 길어집니다. JPQ.. Project/project-board 2022. 7. 11. [Project] API 설계 이번에는 API 설계를 할 차례입니다. 프로젝트 명세서에서 API 엔드포인트를 미리 정해놨습니다. 아직 프로젝트 규모가 크지 않기 때문에 spring에서 제공하는 Srping Data Rest + Spring Data JPA를 이용하여 REST API를 손쉽게 만들어보겠습니다. 그리고 이것을 쉽게 확인할 수 있는 spring-data-rest-hal-explorer를 같이 사용하겠습니다. 먼저 보편적으로, REST API 생성 시 구조는 아래와 같을 것입니다. (Controller -> Service -> Repository) - Controller @RestController @RequiredArgsConstuctor public class ArticleController { private final .. Project/project-board 2022. 7. 11. [DB] 인덱스란? 인덱스란? 데이터베이스에서 인덱스는 특정 칼럼 값에 대한 목차입니다. 책을 보면 맨 앞에 목차를 두어 빠르게 찾아갈 수 있게 하도록 도와주는데 이와 비슷한 개념이 INDEX입니다. 테이블의 검색 속도는 데이터가 적으면 상관없지만 10만 개 100만 개 1억 개 점점 데이터가 방대해질수록 속도가 떨어지게 됩니다. 이때 미리 데이터들에 목차가 되는 형태의 index를 설정해두면 검색 속도를 향상할 수 있습니다. 예를 들어 사용자가 무수히 많은 티스토리에서 블로그 제목이 'abc;라는 블로그를 찾고자 한다면 다음과 같은 이 쿼리를 짜야할 것입니다. SELECT title FROM tistory WHERE title = 'abc'; 인덱스가 없다면 예를 들어 티스토리의 글 개수가 100만 개라면 데이터를 모두 .. DB 2022. 7. 9. [Java] equals()와 hascode() 메서드 equals() 및 hashCode() 메서드는 Java 객체의 부모 객체인 Object 클래스에 정의되어 있습니다. 그렇기 때문에 모든 Java의 객체는 Object 클래스에 정의된 equlas() 와 hashCode 메서드를 상속받고 있습니다. equals() 란? boolean equals(Object obj)로 정의된 equals 메소드는 2개의 객체가 동일한지 검사하기 위해 사용된다. equals() 가 구현된 방법은 2개의 객체가 참조한느 것이 동일한지를 확인하는 것이다. 2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에만 동일한 객체가 된다. public boolean equals(Object o) { if (this == o) return true; } hashCode() 란? in.. Java 2022. 7. 9. [Project] 도메인 설계 및 DB 접근 로직 DB설계 시부터 테이블명을 단수로 할 것인지 복수로 할 것인지 고민하다가 통일성 있게 한다면 문제가 되지 않는다는 글을 보고 저는 단수로 만들기로 하였습니다. (관련 내용은 여기를 눌러주세요.) 의존성 주입과 DB 설계했던 것과 동일하게 엔티티 클래스를 만들어 줍니다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-jpa' application.yml spring: datasource: url: jdbc:mysql://localhost:3307/board username: jisu password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver mysql 기본 포트는 3.. Project/project-board 2022. 7. 9. [Project] 깃허브 이슈 정리 및 브랜치 전략 git : https://github.com/jisu3316/project-board 깃 허브 이슈 정리 이번 프로젝트 형상관리는 깃 허브에서 하고 있다. 깃 브렌치 전략 중에서도 github-flow 전략을 통해 개발을 하기로 정하였습니다. 그리고 처음부터 끝까지 혼자 생각하고 개발을 해야 되니 어떻게 개발을 해야 될까 생각하다가 정처기 시험을 공부할 때 소프트웨어 개발 방법론이 생각나서 그중에서도 애자일 개발 방법론의 칸반을 채택하게 되었다. 왜냐하면 github-flow와도 잘 어울리고 연습하는 것도 좋을 것 같았습니다. 이에 대해서는 이 글 마지막에 추가된 링크를 통해 알아보시면 좋을 것 같습니다. 그리고 이런 칸반을 쉽게 적용 할 수 있고 기록할 수 있는 게 무엇이 있을까?라는 생각으로 찾던 중.. Project/project-board 2022. 7. 7. [Java] RuntimeException Exception은 try-catch를 이용해 프로그램의 비정상적인 종료를 막을 수 있습니다. Exception은 Checked Exception, Unchecked Exception으로 나뉩니다. Checked Exception Checked는 컴파일 시점에서 체크되는 예외로 컴파일 시에 예측이 됩니다. Checked Exception은 발생 시킬 수 있는 메서드를 사용할 경우 반드시 throws를 통한 예외를 던지거나 try-catch를 이용해 예외처리를 해줘야 하는 강제성이 있습니다. Unchecked Exception Unchecked는 컴파일 시 체크되지 않으며 프로그램 실행 도중 발생하는 예외로 예측이 불가능합니다. Unchecked Exception은 발생시 킬 수 있는 메서드를 사용할 경우.. Java 2022. 7. 6. [Spring Boot] @Builer @Builer 란 Lombok에서 제공하는 API입니다. 보통 객체를 생성할 때 new를 사용해 객체를 생성하거나 기본 생성자 외에 파라미터를 넘겨주는 경우로 객체를 생성합니다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Lob private String content; @Builder public Post(String title, String content) { this.title = title; this.content = co.. Spring Boot/어노테이션 2022. 7. 6. [Project] 프로젝트 명세서 취업을 하기 위한 개인 포트폴리오를 만들어 보겠습니다. 첫 시작을 하기 위해서 프로젝트 명세서를 작성해 보는 것이므로 지금부터 고민해본 프로젝트 명세서를 작성해 보도록 하겠습니다. 1. 아이템 선정 2. 개요 3. 요구사항 분석 4. DB설계 5. 유즈케이스 6. API 설계 7. 개발 및 테스트 8. 배포 9. 회고 1. 아이템 선정 누구나 이해하기 쉬운 소재로 명확한 기능 요구 사항을 만든다. 요구사항을 구현하는데 도움이 되는 각종 문서 작업을 경험한다. 자바 + 스프링 부트로 프로젝트 요구사항을 싫제로 구현하는 기술적인 방법을 익힌다. 기획과 문서 작성부터 개발, 형상관리, 테스트, 배포까지 개발 프로세스 전반을 경험한다. 위를 바탕으로 전반적인 웹의 기본 소양이 되는 CRUD 게시판을 만들고, 앞.. Project/project-board 2022. 7. 6. [Spring Security] Authentication 인증 Authentication Authentication는 인증을 의미합니다. 스프링 시큐리티는 사용자의 인증정보를 저장하는 토큰 개념으로 사용한다. 인증 시 id와 password를 담고 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 결과 (user 객체, 권한정보)를 담고 SecurirtyContxt에 저장되어 전역적으로 참조가 가능하다. Authentication authentication = SecurityContexHolder.getContext(). getAuthentication() 구조 1) pricipal: 사용자 아이디 혹은 User 객체를 저장 2) credentials : 사용자 비밀번호 3) authorities : 인증된 사용자의 권한 목록 4) details : 인증 부가 정.. Spring Boot/Spring Security 2022. 6. 30. [Spring Securtiy] Spring Security의 Filter Filter Servlet Container의 Filter 서블릿 컨테이너의 Filter는 Dispatch Servlet으로 가기 전에 먼저 적용된다. Filter들은 여러개가 연결되어 있어 Filter chain이라고도 불린다. 모든 Request들은 Filter chain을 거쳐야지 Servlet에 도착하게된다. Spring Security의 Filter Spring Security는 DelegatingFilterProxy 라는 필터를 만들어 메인 Filter Chain에 끼워넣고, 그 아래 다시 SecurityFilterChain 그룹을 등록한다. 그렇게 하며 URL에 따라 적용되는 Filter Chain을 다르게 하는 방법을 사용한다. 어떠한 경우에는 해당 Filter를 무시하고 통과하게 할 수도.. Spring Boot/Spring Security 2022. 6. 29. 이전 1 ··· 6 7 8 9 10 11 12 13 다음