BC'DE 커뮤니티 Project

BC'DE 커뮤니티 Project/Study

포트 리다이렉트 (포트포워딩)

포트 리다이렉트 주소에 포트까지 연결하기 번거롭다면 포트를 리다이렉트 시킬 수 있다. http는 80 포트로 연결되므로, 80 포트에 접근할 경우 8080으로 리다이렉트 시켜서 포트번호를 입력하지 않아도 되게 설정한다. sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 ※ 이때, EC2의 보안그룹에서 80 포트를 열어줘야한다. http://xxx.xxx.xxx.xxx:8080 → http://xxx.xxx.xxx.xxx으로 접근 가능 ※ 포트 포워딩 삭제 조회 후 넘버 삭제 # 조회 iptables -nL PREROUTING -t nat --line-numbers # 삭제 iptables -t na..

BC'DE 커뮤니티 Project/프로젝트 후기 - 아쉬운 점 & 어려웠던 점

프로젝트 후기 - 개발 진행 시 어려웠던 점 & 끝나고 아쉬웠던 점

💡 어려웠던 점 1. 배포 시 .gitignore와 Travis CI 충돌 문제 👉 gitignore로 등록된 파일을 암호화 시켜서 암호화한 파일을 Build 하도록 Travis CI에서 설정하여 해결 👉 다음번엔 .gitignore로 제외하지 않고, 프로젝트 경로 외부에 파일을 설정해서 배포해보기! 2. SQL(JPA) 지식 부족 👉 전반적인 SQL, JPA 지식이 부족했고 CASCADE(영속성) 관련 정리가 안돼서 CASCADE 에러 시 코드 수정하기에 급급했다. 👉 다음번엔 영속성 관련 지식을 정리하고 적용해보기 3. 여러 개의 파일 업로드 - List 👉 서버 쪽에서는 컨트롤러 파라미터 List uploadImg로 이미지를 받아 저장했는데, 프론트 단에서 어떻게 요청해야 할지 곤란해하셔서 난항을 ..

BC'DE 커뮤니티 Project/Study

Spring Boot application.yml 환경별 프로필 설정 방법 (SpringBoot 2.4 기준 비교)

Spring Boot 2.4를 기준으로 환경별 프로필 설정하는 방법이 바뀌었다. Spring Boot 2.4 이전 spring: profiles: dev #활성 프로필 설정 profiles.include: - devdb # 추가할 프로필 설정 --- spring: profiles: local --- spring: profiles: dev --- spring: profiles: common --- spring: profiles: prod 👉 구분자 '---'를 사용해서 여러 프로필을 나누고, 각 파일마다 spring.profiles로 프로필을 설정한다. application.yml에서 spring.profiles로 활성 프로필을 설정하고, 추가할 프로필이 있다면 spring.profiles.include로..

BC'DE 커뮤니티 Project/Study

@MappedSuperclass

Entity로 설정되지 않은(@Entity 를 쓰지 않은) 클래스에 @MappedSuperclass 를 붙이고 Entity에서 @MappedSuperclass 를 붙인 클래스를 상속받게 되면 부모 클래스에 설정된 필드가 Entity에 Column으로 자동으로 매핑된다. 👉 @MappedSuperclass 는 테이블과 매핑하지 않고 엔티티의 공통된 매핑 정보를 추가해주기 위해 사용 활용 예시 user 테이블과 post 테이블이 있을 때, 두 개의 테이블은 공통으로 createdDate(생성 시간), lastModifiedDate(수정 시간) 컬럼을 가지는 것으로 설계한다. 이때, 공통으로 들어가는 createdDate와 lastModifiedDate는 묶어서 BaseTimeEntity 클래스의 필드로 선언..

BC'DE 커뮤니티 Project/Trouble Shooting

SpringBoot에서 application.yml 이외의 yml 프로퍼티 적용하기

개발 시에 테스트 환경을 분리하기 위해서 application.yml 파일을 각각 main, test 경로에 2개 설정했다. main의 application.yml : src/main/resources/application.yml test의 application.yml : src/test/resources/application.yml 이렇게 2개를 설정해놔도, Test 시에 @SpringBootTest가 있다면, test의 application.yml가 먼저 적용되기 때문에 테스트 시 문제가 없었다. 하지만, application.yml 이외의 다른 yml 파일은 test 시에 읽지 못하는 것 같았다. 현재 프로젝트에서는 AWS S3를 사용하기 때문에 S3 사용 시 인증에 필요한 access-key, s..

BC'DE 커뮤니티 Project/Trouble Shooting

EC2 gradle build 시 무한 로딩 오류(메모리 문제)

EC2에서 git clone으로 서버 파일을 clone하고 ./gradlew test 를 했는데 :compileQuerydsl 에서 무한 로딩이 걸리고 넘어가지 않았다. 구글링을 진행해보니 무한 로딩이 걸리는 오류는 메모리 부족 문제일 수도 있다고 했다. EC2 프리티어에서 사용 가능한 t2.micro의 램이 1GB밖에 되지 않아 메모리 과부하가 걸려서 무한 로딩이 걸린다는 것이었다. 원래 빌드가 실패하면 빌드 실패 메세지가 나오고 오류가 나오는데 이런 메세지조차 나오지 않고 계속 무한 로딩되길래 답답했는데 이런 상황을 보면 메모리 문제가 맞는 것 같았다. 해결 방법 : Swap 메모리 사용 Swap 메모리 : RAM의 메모리가 부족하므로, 리눅스의 HDD 공간을 RAM처럼 사용하는 것! 이를 통해 부족..

BC'DE 커뮤니티 Project/Trouble Shooting

Response Json에 is가 생략되는 문제

BoastPostInfoDto public class BoastPostInfoDto { private Long postId; // POST의 ID private String title; // 제목 private String content; // 내용 private int likeCount; // 좋아요 개수 private boolean isLike; // 좋아요 여부 } boolean 타입으로 Dto에 좋아요 여부 필드인 isLike를 생성했었는데, API 통신 시에 Response에 isLike가 아니라 is가 생략돼서 like로 출력이 됐었다. 해결 * boolean 타입 -> Boolean 타입으로 변경 public class BoastPostInfoDto { private Long postId; ..

BC'DE 커뮤니티 Project/Trouble Shooting

JPA 1:N 맵핑 순환참조 문제 해결 방법

JPA 사용 시 1:N 맵핑 관계에서 조회 시 순환참조 문제가 발생했다. 해결 방법 1. @JsonManagedReference / @JsonBackReference 2. Entity 대신 DTO로 반환 * 문제 상황 Member @OneToMany(mappedBy = "writer", cascade = ALL, orphanRemoval = true) @Builder.Default private List boastPostList = new ArrayList(); BoastPost @ManyToOne(fetch = LAZY) @JoinColumn(name = "writer_id") private Member writer; -------------------------------- @OneToMany(map..

BC'DE 커뮤니티 Project/Trouble Shooting

Request DTO에 null값이 들어가는 이유? - camelCase / PascalCase

DTO에서 Message 필드를 만들고, @Data @AllArgsConstructor @NoArgsConstructor public class UserWithDrawDto { private String Message; } 요청 시 다음과 같이 JSON 형식으로 보냈는데, DTO의 Message 필드에 null값이 들어갔다. { "Message" : "회원탈퇴" } 결론부터 말하면, DTO의 필드명을 대문자로 시작하는 파스칼 표기법(HelloWorld)로 표기해서 생기는 문제다. 해결하려면, 카멜 표기법(helloWorld)으로 필드명을 바꿔주면 된다. 파스칼 표기법 시 null 값이 들어가는 이유 1. Spring의 Json Message Converter는 Jackson 라이브러리를 사용 2. Req..

BC'DE 커뮤니티 Project/Trouble Shooting

DTO deserialize Error (DTO 필드 선언 방식)

회원 컨트롤러 테스트 중에 회원가입 컨트롤러에서 에러가 발생했다. UserRegisterDto를 생성한 후 /register로 요청하고 Dto를 참조하여 UserService의 register 메소드를 실행했는데, 결과는 username으로 조회했을 때 회원이 없다고 떴다. 회원가입이 정상적으로 되지 않은 것이다. UserControllerTest @Test public void 회원가입_성공() throws Exception { //given String RegisterData = objectMapper.writeValueAsString(new UserRegisterDto(username, password, nickName, profileUrl)); log.info("RegisterData = {}",..

BE_성하
'BC'DE 커뮤니티 Project' 카테고리의 글 목록