분류 전체보기
-
[회고] 크래프톤 정글 2기 회고Retrospect 2023. 8. 31. 11:37
2023년 4월 3일부터 시작하여 2023년 8월 17일까지, 총 4.5개월간의 Computer Science를 공부하는 크래프톤 정글 과정이 끝이 났다. 1. 지원 동기 1년 차 개발자 회고에도 작성하였지만(https://techpedia.tistory.com/19) 나는 프로그래밍을 독학하고 바로 스타트업에 취업했다. 빠르게 개발해야 하는 스타트업 특성상 주로 기술 스택 공부에 시간을 투자하였고 Computer Science와는 점점 멀어졌다. CS에 대한 이해가 부족하다 보니 기능 구현은 가능해도 내가 작성한 코드에 확신이 없었다. '이 상황에서 이 자료구조를 사용하는 것이 최선인가?', '왜 비동기를 이렇게 처리하는 것이 응답 속도가 빠를까?' 같은 질문에 답을 할 수 없었다. 그래서 개발자의 기..
-
[회고] 창업 초기 멤버로 일한 1년차 개발자의 회고Retrospect 2023. 8. 19. 16:44
퇴사는 2023년 3월에 했지만, 당시 정리하고 처리할 일이 많아 이제야 회고를 작성하게 되었다. 나는 정식 계약으로는 1년, 급여가 지급되지 않은 기간까지 하면 약 1년 8개월 간 창업 초기 스타트업에서 백엔드 개발자로 일했다. (오해하면 안 되는 것이 부당하게 착취당한 것이 아니라, 경험을 쌓고자 무급임에도 지원한 것이다) 1. 창업 초기 멤버로 합류하게 된 동기 2021년 초, 학교 선배의 이커머스 플랫폼 창업 소식을 접하게 되었다. 당시 나는 node.js와 react를 활용한 기본적인 게시판 제작 능력을 갖추고 있었기에, 실제 사용자를 대상으로 하는 서비스 개발에 참여하고 싶은 욕구가 컸다. 학교를 통해 선배에게 연락을 했고, 그의 창업 초기 상황을 이해하게 되었다. 아직 법인을 설립하기 전이였..
-
[Spring] Spring Boot에서 S3 연동하기Server/Spring 2023. 8. 2. 01:45
개발자 학습 로드맵을 만들어주는 RoadMaker 프로젝트를 개발하던 도중 로드맵의 썸네일을 등록하는 API가 필요해졌다. 이전 회사에서 Express.js에서 S3와 multer를 이용해 multipart/form-data로 전달된 이미지를 S3에 저장하는 API를 만들어본 적은 있었는데, 이번에는 스프링부트로 해당 작업을 해보게 되어 은근히 반가웠다. 이번 포스팅은 SpringBoot와 S3를 연동하는 것에 집중할 예정이기에 S3에 대해서 자세히 다루지는 않을 예정이다. 1. 버킷 1.1. 버킷 생성 AWS 콘솔에 접근한 뒤 버킷을 만든다. ACL을 열어야 사용자가 저장된 이미지를 볼 수 있기 때문에 다 열어준다(안 그러면 Access Denied를 만나게 될 것이다). 이후 '버킷 만들기' 버튼을 ..
-
[Java] DateTimeFormatter로 LocalDateTime 포맷팅 하기Language/Java 2023. 7. 31. 23:10
로드맵 플랫폼인 RoadMaker를 개발 중, 프론트엔드 팀원이 로드맵 생성 일자를 포맷팅 해달라는 요청을 했다. 이전 포맷은 '2023-07-29T15:40:31.849326'와 같은 ISO-8601 포맷이었는데 이는 너무 길어 UI가 예쁘게 나오지 않았고, 사용자가 읽기도 어려울 것 같았다. LocalDateTime 객체를 원하는 형식으로 포맷팅하려면 'java.time.format.DateTimeFormatter' 클래스를 사용하면 된다. DateTimeFormatter 클래스의 기본 사용법은 다음과 같다. import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateTimeFormatting {..
-
[Debug] jakarta.persistence.NonUniqueResultException: query did not return a unique result 해결 방법Toy Project/RoadMaker 2023. 7. 29. 22:46
크래프톤 정글에서 팀 프로젝트인 RoadMaker를 개발 중 위와 같은 에러가 발생했다. 위 에러는 JpaRepository의 조회 결과가 2개 이상 나왔지만, 리턴 타입이 List가 아닌 Optional라서 발생한 문제다. public interface MemberRepository extends JpaRepository { public Optional findByNickname(String nickname); } 프로젝트 정책상 중복된 닉네임을 갖는 회원이 생성되면 안되기에 위처럼 코드를 짰는데, 중복 검사를 하는 부분에 문제가 있어, 중복 닉네임을 갖는 계정이 2개 이상 생성되버린 것이었다. 따라서 문제되는 데이터를 제거하고, 중복 검사 로직을 디버깅하여 문제를 해결하였다. mongodb의 ODM인..
-
[AWS] Elastic IP란 무엇인가?AWS 2023. 7. 17. 04:52
Elastic IP는 고정적인 IP 주소를 할당하고, 이를 인스턴스나 네트워크 인터페이스에 연결할 수 있는 서비스다. EC2 인스턴스의 Public IP는 인스턴스를 중지하고 다시 실행하면 주소가 변경된다. 이로 인해 EC2의 Public IP를 DNS나 다른 서비스의 화이트리스트로 등록했을 경우, IP 주소 변경으로 인해 여러 문제가 발생할 수 있다. 따라서 Elastic IP에서 고정적인 IP 주소를 할당하고, 이를 EC2에 연결해주는 것이다. 이렇게 하면 IP 주소 변경으로 인한 문제를 해결 할 수 있다. 다음은 '탄력적 IP 주소 할당'을 눌러 IP를 생성하고 이를 EC2에 연결했을 때 나오는 화면이다. 참고로 Elastic IP의 경우 사용하고 있을 때는 요금이 발생하지 않지만, 인스턴스가 중지..
-
IAMAWS 2023. 7. 15. 05:00
IAM(Identity and Access Management)는 AWS 리소스에 대한 접근 안전하게 제어할 수 있는 웹 서비스이다. IAM을 사용하면 사용자가 접근할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있다. IAM을 사용하여 로그인 및 권한 부여된 대상을 제어 합니다. DB의 루트 유저와 일반 유저와 비슷한 개념이라고 생각하면 될 것 같다. 권한 AWS 서비스나 자원에 어떤 작업을 할 수 있는지 명시해두는 규칙 Policy (정책) 정책: 여러가지 권한의 모음 사용자나 그룹들에 권한을 직접 적용할 수는 없고 권한들로 만든 정책을 적용해야 한다. 정책은 사용자, 그룹 역할에 적용할 수 있다. 다양한 권한의 모음을 하나의 정책이라고 하는 JSON 문서의 형태로 정의해 놓고 관리할..
-
나만의 무기 만들기: 기획Toy Project/RoadMaker 2023. 7. 10. 10:14
CS 지식을 공부하는 크래프톤 정글에서 알고리즘, C언어, 운영체제 공부 프로그램을 마치고, 나만의 무기 만들기(이하 나만무)가 시작됐다. 나만무는 5주간 현업에서 사용되는 기술 스택을 공부하고, 기술적으로 어려운 주제를 구현하며 실력을 키우는 과제이다. 1. 팀원 구하기 & 멘토 매칭 나만무는 팀 프로젝트로 진행되기 때문에 팀을 꾸려야 했고, 참가자는 팀장과 팀원 중 어떤 역할을 할지 정해야 했다. 나의 경우, 내가 만들 프로젝트의 방향과 기술 스택을 주도적으로 정하고 싶었기 때문에 팀장을 지원했다. 이후 팀원을 모았는데, 운 좋게도 사람들이 흔쾌히 팀에 참여해줘서 백엔드 3명, 프론트엔드 2명으로 팀을 구성할 수 있었다. 팀이 꾸려진 이후, 우리팀을 도와주실 멘토님도 매칭이 되었는데 현 인프랩 CTO..