전체 글

백엔드 프로그래머를 준비하고 있는 대학생입니다 😜 Spring, Java, Git 공부 및 프로젝트 내용을 기록하고 있습니다! 함께 공부하시고 싶으신 분들은 댓글로 함께 소통해요! github : https://github.com/PgmJun
BackEnd/Infra

외부에서 접근이 불가능한 EC2에 Self Hosted Runner를 적용해서 CI/CD 구축하기

사용기술AWS EC2Git ActionsNginxSpringboot/Java AWS 보안 그룹 및 권한 제한으로 인한 고민ec2는 우테코에서 기본 제공해주는 VPC, Subnet, 보안그룹을 사용해야했으며, 여러 기능에 대해서 권한 제한이 걸려있었다. 우아한형제들 계정의 IAM 사용자 계정이기 때문에 혹시라도 AWS 사용에 미숙한 크루원이 pem키 같은 중요한 정보를 Github에 업로드하는 등의 실수를 하게 되면, 회사에 큰 재산적 피해가 갈 수 있기 때문인 것 같았다. AWS IAM 에서 SecretKey를 발급받을 수 있는 권한이 없었고, EC2 접근도 80,443 포트만 전체 접근으로 열려있었고 ssh 프로토콜 통신을 위한 22번 포트는 우테코 캠퍼스 내부 LAN에 연결된 상태로만 접근 가능했다...

부트캠프/우아한테크코스 6기

[협업] 누군가 해주길 기다리지 않고 직접 나서기

우테코의 프로젝트는 2주 간격으로 데모데이가 있어서, 2주 단위 스프린트 방식으로 개발이 진행된다. 이렇게 짧은 단위로 빠르게 치고 나가는 환경에서 같이 일하고 싶은 ‘좋은’ 팀원이 되기 위해, 그리고 ‘좋은’ 팀을 만들기 위해 첫 스프린트 기간인 2주 간 몇 가지 시도와 노력을 거쳐왔다. 좋은 팀원이 되기 위해 노력하게 된 가장 큰 계기는 우테코 때문인데 우테코에서 진행하는 소프트스킬 수업을 들으면서 “협업에 있어서 함께 일하고 싶은 사람은 어떤 사람일까?”, “그런 사람이 되려면 어떻게 해야할까?” 에 대해 고민하게 되었고, ‘좋은 팀원’이란 무엇일지에 대해 정의를 내려보면서 점차 그런 사람이 되기 위해 노력하게 되었다. 내가 생각하는 ‘좋은’ 팀원이란 누군가 해주길 기다리지 않고 직접 나서는 사람이..

Git

Github Webhook을 협업툴과 연결해서 팀의 생산성 높이기 (with. Discord)

협업 과정에서 개발 생산성을 증가시키는 방법은 다양하지만, 그중 협업을 편하게 만들어주는 협업툴을 활용하는 것도 좋은 방식이라고 생각한다. 우리 땅콩 팀은 우테코에서 사용하고 있는 Slack을 사용하여 프로젝트 협업 관리를 하려했지만,무료 버전에서는 대화 기록이 3개월 밖에 유지되지 않는 Slack의 단점이 너무 크다는 판단 하에Discord를 협업툴로 정하게 되었다. Discord는 정말 다양한 서비스와 연동하여 사용할 수 있는 협업툴인데,Discord 채널에 Webhook을 연결하여 Github 내에서의 Issue 생성, PR 생성 등 특정 행위가 발생하면 알림을 보내도록 설정할 수 있었다. 우리 팀의 VCS(Version Control System)는 Github이고,VCS와 관련된 주요 동작이 발..

BackEnd/Spring

스프링 MVC 내부 동작 원리 (with. 핸들러 매핑, 어뎁터 매핑, Filter, Interceptor.. etc)

이 글은 김영한님의 스프링 MVC 강의 영상을 참조하여 작성되었습니다.   Spring MVC 동작 과정 🍃 0. HTTP 요청 💭Client로부터 요청이 들어오면 Front Controller인 Dispatcher Sevlet이 요청을 받는다. Dispatcher Sevlet은 받은 요청을 처리할 수 있는 Handler 객체를 가져온다. 0번 과정에서 Dispatcher Servlet에 요청이 들어오기 직전이 Filter의 동작 시점이다.Dispatcher Servlet 이후에 동작하는 ControllerAdvice는 이러한 동작 시점에 의해 Filter 측에서 발생하는 예외까진 잡지 못한다는 특징이 있다.     1. 핸들러 조회 💭핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조..

부트캠프/우아한테크코스 6기

[우아한테크코스] 레벨2 돌아보기

우테코에 들어온 지 진짜 얼마 안된 것 같은데 어느덧 시간이 지나 레벨3가 시작하기 전날이 되었다.레벨3를 시작하기 전, "내가 어떤 것들을 중점에 두고 레벨2에 임했는가", "레벨2를 거치며 어떤 성장을 이루었는가" 를 되돌아보는 글을 적어보려고 한다. 💭 무엇을 중점에 두었는가하나의 레벨은 내가 원하는 걸 다 챙길 수 없는 2달 가량의 짧은 기간이기 때문에이 안에서 가장 효율적으로 무언가를 얻을 수 있는 방법을 찾기 위해 힘쓴 것 같았다. 우테코에서 가장 많이 얻어갈 수 있는 학습 방법 찾기특히 학습 방법에 고민이 많았다.레벨1을 되돌아보면 생각보다 공부할 시간이 많이 없다고 느꼈다.미션을 수행하면서 스터디도 하고 책도 보고 하는 사람들 정말 신기했다. 만약 어떤 날 하루동안 A,B를 하려고 했다면..

BackEnd/Spring

Spring @Sql 애노테이션의 동작 원리와 트러블슈팅 기록

우아한테크코스 레벨2에서 스프링부트를 활용한 미션을 수행하면서, 테스트 코드를 어느때보다 열심히 작성하고 있는 것 같다.하지만 테스트 코드에서 @Sql 을 사용하는 과정에서 문제를 마주하게 되었고,이를 @Sql 애노테이션의 동작 원리를 살펴보는 좋은 기회로 여겨 문제 상황과 학습 내용을 기록해보고자 한다.   @Sql 애노테이션이란?마주한 문제에 대해 알아보기 전에우선 Sql 애노테이션이 무엇인지부터 알아보자.  정확한 설명을 위해 공식문서의 말을 빌려보자면, ‘@Sql 애노테이션은 통합 테스트 환경에서 주어진 데이터베이스에 실행시키기 위한 SQL의 scripts 또는 statements를 구성하기 위한 목적으로 테스트 클래스 또는 테스트 메서드에 붙여주는 애노테이션’ 이라고 한다. 간단히 @Sql 애노..

BackEnd/Spring

Springboot Toss 결제 API 연동

외부 API 연동하기우테코에서 방탈출 미션을 수행하면서, 방탈출 예약 결제 처리에 Toss 결제 API 를 연동하게 되었다. 방탈출 미션은 방탈출 예약 웹 서비스를 만드는 미션으로 JS/CSS/HTTP 기반 웹 클라이언트 와 Springboot/Java 기반 백엔드를 함께 개발한다. 하지만 백엔드에서 고려할 부분에 대한 흐름을 기록하고싶기 때문에 이번 내용은 클라이언트 측이 아닌 백엔드 측의 기준으로 설명한다. 또한 Toss API 연결이라는 하나의 작업보다는 외부 API 연결이라는 큰 틀에 집중해보았다는 점을 참고해서 글을 읽으면 도움이 될 것이다. 또한 이번에 다루는 내용은 실제 결제까지의 과정이 아니라 학습을 위한 과정이기 때문에 토스에서 지원하는 '테스트'용 키값 등을 사용했다는 점도 참고바란다...

BackEnd

GPT API의 응답 값을 원하는 형태로 만들어보자 (with. Chat Completion API & Fine-Tuning)

졸업작품 프로젝트 도중 마주한 문제 졸업작품 프로젝트 ‘코리’를 개발하는 과정에서 GPT API를 사용하여 AI로부터 원하는 응답값을 얻어오는 기능을 구현하던 중 너무나도 어지러운 문제에 직면했다.코리는 GPT를 사용해서 개발자들의 전반적인 작업에 도움을 주는 어시스턴트 서비스이다.‘코드 리팩토링’, ‘변수명 추천’, ‘주석을 통한 코드 설명’ 기능이 존재하는데, 이를 구현하기 위해 SpringBoot 환경에서 HttpClient를 사용하여 GPT API에서 제공하는 gpt-3.5-turbo 모델과 통신하여 응답 값을 얻어오는 것 까지는 성공했다.하지만 여기서부터 몇 가지 문제에 직면하면서 고민이 시작되었다.   문제1. 일정하지 않은 응답 형태  GPT 사이트에 접속하여 질문을 던질 때, 질문을 조금만..

PgmJUN
Back world