Project2024. 1. 24. 13:01[AWS] 아마존 벽돌 그만 사주기 프로젝트, Resource Consolidation(월 25만원 - >2만원)

AWS… 월 청구 비용 25만원. 이게 정말 맞나요?(클라우드에 대한 이해 없이 진행한 배포의 비싼 수업료)  EC2 인스턴스 2개에서 spring - jsp 프로젝트와 node-react 프로젝트를 돌리던 어느날, 어마무시한 청구서가 날아왔다. 팀프로젝트를 진행하며 동일한 DB를 사용하기위해 공유했던 각 프로젝트들의 RDS 인스턴스와 더불어서, node-react에 대한 이해 없이 백엔드와 프론트엔드 각각의 js 런타임을 서버에서 돌리기 위해 규모가 큰 EC2인스턴스를 사용한 결과였다. AWS 클라우드와, Node 그리고 JS의 런타임에 대한 이해의 부족이 만들어낸 눈덩이같은 결과였다.  이에, 우선 사용중인 AWS 서비스들이 정말 필요한지 판단을 하기 시작했는ㄷ, 포트폴리오를 위한 서비스들이었고, 유..

Project2024. 1. 24. 11:22[Ncloud, AWS] aws밖에 모르던 클라우드린이의 Ncloud 적응기(Feat.. 클라우드에 대한 이해)

1. 학습 계기 취준생 시절, 개인/팀 프로젝트에서 매번 배포를 도맡으면서 AWS EC2, RDS, S3 등을 통한 배포에 어느새 적응해가던 내게, 좋은 기회로 외주 프로젝트의 기회가 찾아왔다. 당연하게 AWS로 배포를 시도하려던 내게 대표님께서 기존 외주 작업자들이 사용중이던 Ncloud를 통한 배포를 요청하셨다. 두구둥.. 그렇다 세상에는 AWS사를 제외하고도 수많은 클라우드 사가 존재했고, 최근 몇 년 간 ncloud사의 적극적인 영업으로 ncloud의 클라우드 시스템을 사용하는 회사들이 많아지기 시작했다고 들었다. 2. 이번 학습으로 인한 기대 효과 사실 기존에는 AWS를 사용하고 있었지만 "클라우드"라는 것에 대해서 완벽히 이해하고 사용하고 있다는 느낌은 받을 수 없었다. 단순히 '이런 상황에서..

Project2023. 12. 26. 17:08front에서는 multipart formdata로 보내준 request가 spring에서는 application octet-stream이 되어 돌아오는 마법(HTTP 표준과 content type, multipart formdata)

obsidian에서 작성중 MultipartResolver를 bean으로 설정해주어야 하는가? No spring 어플리케이션의 경우 web.xml에서 MultipartResolver를 bean으로 직접 등록해주어야 하지만, spring boot 어플리케이션은 default로 제공한다. HTTP 표준과 content type HTTP 표준은 1개의 요청에는 하나의 content type만 전송하는것을 약속함. (여러개의 content 타입을 전송하는것이 불가능한것은 아님.) multipart formdata가 여러 content-type를 보낼수 있도록 만들어진 것 아닌가? multipart formdata란? 디버깅으로 밝혀진 @ReuestParam의 반란 이미지 등의 file 업로드를 별도의 api로 ..

Project2023. 12. 26. 17:06CI 적용기(jacoco + checkStyle + sonar cloud + Github Action)

obsidian에서 작성중 Jacoco : 자바 코드 커버리지를 체크하는 데에 사용되는 오픈소스 라이브러리 Spring boot Gradle 프로젝트는 Build시에 Test를 실행할 까?(Feat… jacoco CI 적용일지)

[troubleShooting, Spring] Internal error - Type definition error(Response Getter, JPA, Fetch Lazy Loding, Entity to DTO 반환중 Type Error)
Project/(공통)troubleshooting2023. 8. 18. 17:22[troubleShooting, Spring] Internal error - Type definition error(Response Getter, JPA, Fetch Lazy Loding, Entity to DTO 반환중 Type Error)

💡 JPA Lazy Loding관련 오류인줄 알았으나, Dto 적용시 Response에 @Getter를 생성해주지 않아 발생한 문제였다. 에러코드 "Internal error - Type definition error: [simple type, class wanted.preonboarding.backend.post.dto.PostResponse] \n cause : com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class wanted.preonboarding.backend.post.dto.PostResponse and no properties discovered to create BeanSeria..

[playground] @Embedable, Dto, Mapstruct, Entity setter 그 사이의 고민들
Project/playground(java-spring,멀티모듈)2023. 7. 3. 17:39[playground] @Embedable, Dto, Mapstruct, Entity setter 그 사이의 고민들

1. @Embedded , @Embeddable : JPA_ Entity의 가독성 높이기 1.1 Member Entity의 기존 구성요소 public class Member extends Auditable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String email; @Column(length = 20) private String nickname; private String password; private String realName; @Column(nullable = false, unique = true) private ..

[playground]  Entity update, 어떤게 최선이지?
Project/playground(java-spring,멀티모듈)2023. 7. 3. 17:38[playground] Entity update, 어떤게 최선이지?

프로젝트를 진행하며 Member에 대한 CRUD를 구현하던 중, 가장 고민이 됐던 부분은 Update라고 말할 수 있다. 1. Setter방식, 과연 이대로 괜찮은가? 처음에는 아래와 같이 Member Entity의 @Setter를 열어둔 뒤, update시에 Dto를 통해 받아온 값들을 Entity에 각각 SetXXX해주는 방식을 사용했었다. @Transactional public Member updateMember(Member member) { Member existingMember = getMemberByEmail(member.getEmail()); existingMember.setEmail(member.getEmail()); existingMember.setPassword(member.getPas..

[playground] spring boot 멀티모듈 프로젝트 시작하기
Project/playground(java-spring,멀티모듈)2023. 6. 25. 21:35[playground] spring boot 멀티모듈 프로젝트 시작하기

백엔드 개발자로 취업을 준비하며, 국비교육 이후 몇 개의 프로젝트들을 진행해 왔지만 "매력 있는 신입 개발자"가 되기에는 모자람을 느꼈다. 이에 백엔드 개발자 커뮤니티와 각종 커피챗에 참여해 현직 미들, 시니어급 개발자분과 이야기를 나눈 후 Spring Framework의 Security와 Oauth2, JPA, Batch 등 실무에서 기본적으로 다룰 기능들이 포함되며 Testcode와 api 명세 자동화에 대한 나만의 고민이 담긴 프로젝트를 취업 준비와 병행하기로 결정해서 진행 중이다. 이미 시작한 지는 조금 되었지만 기존 프로젝트들과 다르게 하나하나 많은 고민들이 담긴 프로젝트이기에 작은 고민까지 하나하나 기록에 남기고 싶어 블로그 연재를 시작한다. 우선, 아키텍처는 멀티모듈 아키텍처를 선정해서 진행..

Project/(공통)troubleshooting2023. 5. 30. 06:40[AWS, SSH] Permission denied (publickey)

💡 Private key의 Permission이 너무 공개되어있기 때문에 발생한 이슈 에러 코드 McBookPro ~ % ssh -i "[pem 키 위치/파일명].pem" [계정]@[aws 퍼블릭 IPv4 DNS 주소] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '[pem 키 위치/파일명].pem' are too open. It is required that your private key files are NOT acces..

Project/(공통)troubleshooting2023. 5. 30. 06:37[RDS,mySQL] RDS 포트 변경 이슈com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

💡 RDS 포트를 보안 관련 이슈로 변경하였지만, yml에 변경된 포트를 반영해주지 않았기 때문에 발생한 이슈 에러 코드 2023-05-30 06:27:29.225 ERROR 58789 --- [nio-8021-exec-1] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received a..

[troubleShooting] AWS RDS 인바운드 포트 설정 관련(Operation timed out)
Project/(공통)troubleshooting2023. 5. 29. 17:56[troubleShooting] AWS RDS 인바운드 포트 설정 관련(Operation timed out)

💡 NAT 환경에서 공인 IP주소를 입력해주지 않았기 때문에 발생한 이슈. 에러 코드 DBMS: MySQL(버전 8.0.28) 대/소문자 구분: 일반=exact, 구분자 추가=exact 드라이버: MySQL Connector/J(버전 mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0), JDBC4.2) Operation timed out. 핵심 요점 와이파이 등 NAT을 이용할 시 공인 IP가 아닌 사설 IP를 AWS 보안그룹 인바운드 규칙에 추가할 시 계속해서 접근이 차단된다. 해결 방안 공인 IP를 인바운드 규칙에 추가한다 ipconfig가 아닌 네이버의 내 ip 찾기 이용 터미널에서 curl [ifconfi..

[troubleShooting, Spring] package org.springframework.jdbc.datasource does not exist
Project/(공통)troubleshooting2023. 5. 28. 14:45[troubleShooting, Spring] package org.springframework.jdbc.datasource does not exist

package org.springframework.jdbc.datasource does not exist 💡 프로젝트 생성시 JDBC dependency를 implementation 하지 않았기 때문에 발생한 이슈 에러 코드 java : package org.springframework.jdbc.datasource does not exist 핵심 요점 JDBC dependency를 gradle.build에 추가해준다. 해결 방안 JDBC dependency를 gradle.build에 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-jdbc'

image