Spring
-
Lombok 사용시 주의할 점Spring 2021. 12. 29. 09:36
스프링 프로젝트를 진행하면 lombok 라이브러리의 편리함 때문에 이를 사용하는 경우가 많지만, 롬복을 사용시에는 다음과 같은 주의점이 존재한다. @AllArgsConstructor, @RequiredArgsConstructor 의 사용 금지 @AllArgsConstructor public static class Card { // private Card(long frontNumber, long backNumber) { // this.frontNumber = frontNumber; // this.backNumber = backNumber; // } private long frontNumber; private long backNumber; } @AllArgsConstructor public static cl..
-
RESTful APISpring 2021. 12. 19. 15:41
API는 Application Programming INterface로 컴퓨터 프로그램간 서로 정보 교환이 가능하도록 하는 것으로 REST API는 REST기반으로 서비스 API를 구현한 것이다. RESTful API RESTful API란 REpresentational State Transfer로 자원에 대한 행위 를 HTTP Method(GET, POST, PUT, DELETE)로 표현하고 자원을 URI로 표현하는 REST아키텍쳐를 스타일 을 따르면서 구현된 시스템을 말한다. 이해하기 쉽고 사용하기 쉬운 API를 만드는 것이 목적이다. REST의 속성 REST는 자원 기반 구조(Resource Oriented Architecture)의 4가지 속성을 따른다. Addressability : 제공하는 모..
-
트랜잭션 (feat. @Transactional)Spring 2021. 12. 18. 18:18
트랜잭션이란 비지니스 로직에서 쪼개질 수 없는 하나 단위의 작업을 말한다. (DB상태 변화를 위해 행하는 작업의 작은 단위) ACID원칙 트랜잭션에는 네가지 원칙이 있다. 원자성 (Atomicity) : 트랜잭션은 하나의 단위로 이루어져야 한다. (모두 성공시 실행, 하나라도 실패시 rollback처리) 일관성 (Consistency) : 트랜잭션 성공시 DB의 데이터는 일관성(같은 결과)을 지녀야 한다. 격리성 (Isolation) : 트랜잭션 처리 과정 중 외부의 간섭은 없어야 한다. (독립적 실행) 영속성 (Durability) : 트랜잭션이 성공하면 그 결과는 영속적으로 보관 되어야 한다. (영구 반영) 트랜잭션 관리 (범위) 트랜잭션의 경계는 프레젠테이션층과 비지니스 로직 층 사이에 존재하는 것..
-
연관 관계의 엔티티 기준으로 order 해서 데이터를 가져오고 싶을 때Spring 2021. 11. 6. 12:31
@OneToMany의 관계의 데이터에서 매핑된 엔티티의 아이디 기준으로 데이터를 가지고 오고 싶을 때가 있다. 이럴때 방법은 ①@query로 작성해주는 방법과 ②@OrderBy어노테이션을 통해서 작성할 수 있다. @Query 어노테이션을 통해 쿼리 작성 @Query(value = "SELECT DISTINCT p FROM Post p LEFT JOIN FETCH p.postImages i ORDER BY i.createdAt DESC", 연관관계의 엔티티의 칼럼을 기준으로 데이터를 가지고 오고 싶을 때 위와 같이 작성해주면 된다. @Query(value = "SELECT DISTINCT p FROM Post p LEFT JOIN FETCH p.likePosts ORDER BY SIZE(p.likePost..
-
multipart.MaxUploadSizeExceededException 오류 발생시Spring 2021. 11. 6. 11:56
기본으로 설정된 multipart파일의 사이즈보다 넣으려는 파일의 크기가 크기 때문에 발생한다. (디폴트 값은 1048576 bytes = 1MB) application.properties에 값 설정을 변경해줌으로서 해결할 수 있다. SpringBoot 2.x의 버전 spring.servlet.multipart.maxFileSize=10MB spring.servlet.multipart.maxRequestSize=10MB SpringBoot 1.4.x & 1.5.x의 버전 spring.http.multipart.maxFileSize=10MB spring.http.multipart.maxRequestSize=10MB SpringBoot 1.3.x혹은 그 이전 버전 multipart.maxFileSize=10..
-
Data too long for column 오류 발생시Spring 2021. 11. 6. 11:52
컬럼에 기본 설정된 바이트 길이보다 들어온 데이터의 바이트 길이가 커서 발생하는 오류이다. 해당 컬럼의 길이를 늘려주면 해결된다. @Column(length = 늘이고자 하는 길이) String name; (참고한 사이트) https://scshim.tistory.com/337 [JPA] 오류 해결: “Data too long for column” Spring Data JPA를 통해 아래와 같은 엔티티로 MySQL 데이터베이스에 테이블을 생성한다고 가정하자. @Entity public class SurveyAnswer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; Lo.. scshim.tistory.com
-
Amazon S3를 이용해서 파일 저장, 삭제하기Spring 2021. 11. 5. 22:54
이미 프로젝트의 로컬폴더에 이미지 저장하는 코드를 구현했었다. (FIle Uplaod Utils) 이것을 amazon S3를 통해서 원격으로 S3에 파일을 처리하도록 해보자. 먼저 aws에 가입해서 버킷을 만들어 주고 '내 보안자격 증명'에서 access_key와 secret_key을 만들어준다. (생략) 여기서 발급받은 access_key, secret_key는 절대! 외부로 노출되지 않도록 해야한다. (해당 키를 public github에 올린다거나 하면 aws에서 연락이 왔다는 글도 봤다.) 결제 카드를 등록해서 가입하고 결제와 관련된 부분이므로 조심 또 조심해야한다. (로그인 2차 보안도 해놓자) S3 Dependency com.amazonaws aws-java-sdk 1.11.1000 https..
-
Springboot(Maven), React, MySQL 프로젝트 Heroku 배포하기Spring 2021. 11. 5. 22:06
웹 앱에 대한 서버와 프론트엔드 (rest api로 프록시를 설정해서 연결 완료) 개발을 완료했다면, 이제 데이터 베이스와 함께 앱 배포를 해야한다. (여기서 거진 5일을 소비했다...^^) 개발 겨우 다해놨는데 외않되,,,?ㅎ 이러한 사태를 방지하기 위해서 꼭 애초에 프로젝트 구성을 잘 짜는 것이 중요하다. 프로젝트를 프론트엔드, 백엔드 따로따로 모두 완성해서 다른 포트에 실행하는 상태라면 다음의 순서대로 배포해보자. frontend를 backend 폴더 안으로 옮겨주기 이 프론트엔드를 백엔드로 옮겨주기란 것은 다음과 같이 인텔리제이로 완성된 백엔드앱 안에 프론트 엔드를 넣어주는 것이다. 📦APP ├── 🗂backend │ ├── src ├── 🗂frontend 처음의 이러한 구조에서 📦APP ├── ..