전체 글

하루하루 재밌게 배웠던 내용을 기록하는 블로그입니다
인프라

private 서브넷에 인스턴스를 외부와 연결할 때, public ip? private ip?

어떤 문제가 있었나요? 우아한테크코스에서 private 서브넷에 db 인스턴스를 두고, 보안을 위해 외부에서 접속을 차단하려고 했습니다. 이 과정에서 총 2가지의 문제점이 있었습니다. private 서브넷에 인스턴스가 인터넷에서 mysql을 설치할 수 없었습니다. public 서브넷에 있는 인스턴스에서 private 서브넷에 있는 인스턴스에 접속이 안되었습니다. 이 부분을 어떻게 해결했는지 알아보도록 하겠습니다. 아래의 모든 설명은 AWS 를 기준으로 합니다. private 서브넷에 인스턴스가 인터넷에서 mysql을 설치할 수 없었다. 해결 방법 public ip 자동할당을 해주지 않아서, 인터넷에 연결이 안 되었습니다. 이를 해결하기 위해 public ip 자동할당을 해주었습니다. 왜 public ip..

프로젝트

카페인팀 서버 아키텍처를 설명해드리겠습니다

안녕하세요 우아한테크코스 카페인팀 누누입니다 이번에 카페인 팀에서 배포 아키텍처를 결정하게 되었던 과정에 대해서 정리를 해보고 싶어서 글을 쓰게 되었습니다. 아키텍처와 서버가 배포되는 과정을 보여드리면서 시작하도록 하겠습니다 서버가 배포되는 과정은 다음과 같습니다. 우아한테크코스 인스턴스에 대한 소개 우테코에서 선택할 수 있는 인스턴스는 총 2가지 종류입니다. 퍼블릭 서브넷에 있는 인스턴스 캠퍼스에서만 SSH 접근이 가능한 인스턴스입니다. 미리 열려있는 포트들만 허용이 되어 있습니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다 프라이빗 서브넷에 있는 인스턴스 퍼블릭 서브넷에 있는 인스턴스를 통해서만 접근이 가능합니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다...

Spring

스프링에서 발생한 에러 로그를 슬랙으로 모니터링하는 방법

안녕하세요 카페인팀 nunu입니다. 오늘은 스프링에서 발생한 에러 로그를 슬랙으로 모니터링하는 방법에 대해서 알아보려고 합니다. 목차는 다음과 같습니다. 스프링에서 로그를 남기는 방법 Slf4 j의 동작원리 Logback의 동작원리 Logback을 사용해서 슬랙으로 에러 로그를 모니터링하는 방법 스프링에서 로그는 어떻게 찍을까? 스프링에서 로그를 찍는 방법은 여러 가지가 있지만, 가장 간단한 방법은 System.out.println()을 사용하는 것입니다. @RestController public class TestController { @GetMapping("/test") public String test() { System.out.println("test"); return "test"; } } 당연하..

우아한테크코스

"[DB] 대량의 데이터를 DB에 넣는 과정을 최적화해보자"

안녕하세요 우아한테크코스 카페인팀 누누입니다 이번에는 대량의 데이터를 DB에 넣는 과정을 최적화하는 과정에서 알게 된 내용을 공유하려고 합니다 이번 최적화의 목표 전기차 충전소에 대한 공공 데이터를 가져오고, 그 데이터를 DB 에 넣는 과정을 최적화해보자 대량의 데이터를 삽입하는 과정 저희 팀의 요구사항을 간단하게 정리하면 다음과 같습니다 대량의 데이터를 공공 데이터에서 전기차 충전소와 전기차 충전기에 대한 데이터를 가져온다 충전소는 6만 개, 충전기는 23만 개의 데이터가 존재한다. 한 번에 가져올 수 있는 양은 9999개 까지다. 이 데이터를 DB에 넣는다 충전소와 충전기는 1:N 관계이다 최적화 전은 어떤 상황이었는데? 위 사진을 잘 보시면 아실 수 있으시겠지만, 2000개를 저장하는데, 231.7..

우아한테크코스

"pr 본문에 이슈 번호를 달아주는 기능을 만들었습니다"

안녕하세요 우테코 카페인팀 누누입니다 빠르게 결과부터 보고 가시죠 어떤 결과가 나왔나요? pr의 본문 끝에, 연관된 이슈 번호를 달아주는 기능을 만들었습니다. 밑에 사진을 보시면 쉽게 이해하실 수 있을 것 같습니다. github에서 issue 번호가 pr에 담겨있다면 2가지 장점이 생기는데요. issue를 클릭했을 때, 자동으로 그 issue로 넘어갈 수 있습니다. (호버만으로 이슈에 대한 간단한 정보를 볼 수 있습니다) pr 이 merge 되었을 때, 자동으로 issue 가 close 됩니다. 이 과정을 손으로 진행하는 것보다, 자동으로 진행하게 되면 실수도 줄어들고, 개발 과정이 편해질 것 같아서 이 기능을 제작하게 되었는데요 중요한 점 이 과정을 진행하려면 밑에서 소개해드릴 브랜치 네이밍 규칙이 필..

Java

우리 프로젝트에서 java 17을 사용하게 된 이유

우아한테크코스에서 자바 11을 사용하는 것이 너무 익숙해진 상황이어서, java 11 대신 java 17을 쓰려면 쓰는 대신, 왜 java 17을 쓰면 좋은지에 대해서 설득을 하는 시간이 있어야 하는데요 처음에는 단순히 record 클래스가 좋아요, collect(Collectors.toList()); 대신 toList() 만으로 해결할 수 있어서 좋아요 까지밖에 설명할 수 없었습니다. 이것만으로 동의를 해줘서 일단 java 17을 사용하기로 했지만, 이번 기회에 조금 더 자세하게 알아보려고 합니다 Java 17 과 Java 11의 중요한 차이들 기능적인 부분과, 숨겨진 부분을 나누어볼 수 있을 것 같습니다. 기능적인 차이점 언제나 직접 차이를 보면 더 직관적이기 때문에, 직접 코드를 보면서 설명을 해보..

우아한테크코스

[레벨3] 프로젝트 1주차 회고

프로젝트에 대한 소개 프로젝트 주제를 1 문장으로 표현하면? 원하는 전기차 충전소를 편하게 찾을 수 있는 서비스 or 실시간 전기자동차 충전소 지도 및 사용 통계 조회 서비스 어떤 문제를 해결하려고 이 프로젝트가 시작되었는가? 전기차 충전소가 너무 많은데, 사용자가 진짜 원하는 조건의 충전소를 찾기 어려워요 사용자가 필요로 하는 정보가 생각보다 많은데, 이 부분을 보기 편하게 만들어준 웹이나 앱이 거의 없습니다. 사용자가 원했던 정보들은 이런 것들이 있었는데요 충전기의 타입을 알고 싶어요 급속, 완속 이라고 하는 충전 방식에 따라 충전 속도가 달라지고, 배터리 수명이 달라집니다. 충전기 타입이 많아서 어댑터가 없는 경우라면 특정 타입의 충전기만 사용할 수 있습니다 충전소마다 혜택이 달라요 특정 충전소에서..

프로젝트

프로젝트 git branch 전략 어떤 것이 있을까?

현재 상황은 어떤데? 현재 우아한테크코스에서는 프론트 코드와 백엔드 코드가 같은 레포지토리를 사용하고 있습니다. 프론트와 백엔드가 같이 작업하기에, 의도치 않은 충돌이 자주 생길 수 있는 구조이기에, 이를 git branch 전략으로 충돌을 줄이고자 합니다 Git Branch 전략이란? git을 사용해서 소프트웨어 개발을 관리하는 방법입니다. 여러 개발자가 동시에 작업하고 코드를 통합할 때 생기는 충돌을 효율적으로 조정하기 위한 방법입니다. 왜 git branch 전략이 중요한데? 아래에 있는 4가지를 제외하고도 훨씬 많은 장점이 있을 수 있습니다. 1. 동시 작업이 편하다 여러 사람이 독립적으로 작업하고, 커밋을 할 때, 자신의 브랜치에서 변경 사항을 커밋하게 됩니다. 브랜치가 병합될 때만 충돌을 해결..

TIL

23-06-17 동적 설정 변경 필요성, 운영체제 유튜브 보기

개발 서버 설정 동적으로 변경 개발을 하다보면, 토큰 만료 시간을 줄여서 로그인 검증을 할 수도 있고, 토큰 만료 시간을 늘려서 배포를 할 수도 있다 이 부분을 동적으로 배포하지 않고, 변경할 수 있는 endpoint 를 열어둔다면? 당연하지만 위험은하겠지만 개발 서버기 때문에 감안할 수 있다고 생각한다 특정 secret 들을 변경할 수 있도록 열어두는 방향도 고민해봐야겠다 스레드 unit of execution 프로세스 컨텍스트 스위칭 mmu, tlb + 스레드 컨텍스트 스위칭 작업을 함 스레스 컨텍스트 스위칭 cpu 에 데이터만 바꿔끼우고, 스택만 갈아끼움 cpu bound cpu 기다리는 시간 코어 나 코어 +1 개의 스레드만 작동시키도록 권장 io bound io 작업 기다리는 시간 스레드는 상황..