안녕하세요 카페인팀 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 에 넣는 과정을 최적화해보자 대량의 데이터를 삽입하는 과정 저희 팀의 요구사항을 간단하게 정리하면 다음과 같습니다 대량의 데이터를 공공 데이터에서 전기차 충전소와 전기차 충전기에 대한 데이터를 가져온다 충전소는 6만 개, 충전기는 23만 개의 데이터가 존재한다. 한 번에 가져올 수 있는 양은 9999개 까지다. 이 데이터를 DB에 넣는다 충전소와 충전기는 1:N 관계이다 최적화 전은 어떤 상황이었는데? 위 사진을 잘 보시면 아실 수 있으시겠지만, 2000개를 저장하는데, 231.7..
안녕하세요 우테코 카페인팀 누누입니다 빠르게 결과부터 보고 가시죠 어떤 결과가 나왔나요? pr의 본문 끝에, 연관된 이슈 번호를 달아주는 기능을 만들었습니다. 밑에 사진을 보시면 쉽게 이해하실 수 있을 것 같습니다. github에서 issue 번호가 pr에 담겨있다면 2가지 장점이 생기는데요. issue를 클릭했을 때, 자동으로 그 issue로 넘어갈 수 있습니다. (호버만으로 이슈에 대한 간단한 정보를 볼 수 있습니다) pr 이 merge 되었을 때, 자동으로 issue 가 close 됩니다. 이 과정을 손으로 진행하는 것보다, 자동으로 진행하게 되면 실수도 줄어들고, 개발 과정이 편해질 것 같아서 이 기능을 제작하게 되었는데요 중요한 점 이 과정을 진행하려면 밑에서 소개해드릴 브랜치 네이밍 규칙이 필..
우아한테크코스에서 자바 11을 사용하는 것이 너무 익숙해진 상황이어서, java 11 대신 java 17을 쓰려면 쓰는 대신, 왜 java 17을 쓰면 좋은지에 대해서 설득을 하는 시간이 있어야 하는데요 처음에는 단순히 record 클래스가 좋아요, collect(Collectors.toList()); 대신 toList() 만으로 해결할 수 있어서 좋아요 까지밖에 설명할 수 없었습니다. 이것만으로 동의를 해줘서 일단 java 17을 사용하기로 했지만, 이번 기회에 조금 더 자세하게 알아보려고 합니다 Java 17 과 Java 11의 중요한 차이들 기능적인 부분과, 숨겨진 부분을 나누어볼 수 있을 것 같습니다. 기능적인 차이점 언제나 직접 차이를 보면 더 직관적이기 때문에, 직접 코드를 보면서 설명을 해보..
프로젝트에 대한 소개 프로젝트 주제를 1 문장으로 표현하면? 원하는 전기차 충전소를 편하게 찾을 수 있는 서비스 or 실시간 전기자동차 충전소 지도 및 사용 통계 조회 서비스 어떤 문제를 해결하려고 이 프로젝트가 시작되었는가? 전기차 충전소가 너무 많은데, 사용자가 진짜 원하는 조건의 충전소를 찾기 어려워요 사용자가 필요로 하는 정보가 생각보다 많은데, 이 부분을 보기 편하게 만들어준 웹이나 앱이 거의 없습니다. 사용자가 원했던 정보들은 이런 것들이 있었는데요 충전기의 타입을 알고 싶어요 급속, 완속 이라고 하는 충전 방식에 따라 충전 속도가 달라지고, 배터리 수명이 달라집니다. 충전기 타입이 많아서 어댑터가 없는 경우라면 특정 타입의 충전기만 사용할 수 있습니다 충전소마다 혜택이 달라요 특정 충전소에서..
현재 상황은 어떤데? 현재 우아한테크코스에서는 프론트 코드와 백엔드 코드가 같은 레포지토리를 사용하고 있습니다. 프론트와 백엔드가 같이 작업하기에, 의도치 않은 충돌이 자주 생길 수 있는 구조이기에, 이를 git branch 전략으로 충돌을 줄이고자 합니다 Git Branch 전략이란? git을 사용해서 소프트웨어 개발을 관리하는 방법입니다. 여러 개발자가 동시에 작업하고 코드를 통합할 때 생기는 충돌을 효율적으로 조정하기 위한 방법입니다. 왜 git branch 전략이 중요한데? 아래에 있는 4가지를 제외하고도 훨씬 많은 장점이 있을 수 있습니다. 1. 동시 작업이 편하다 여러 사람이 독립적으로 작업하고, 커밋을 할 때, 자신의 브랜치에서 변경 사항을 커밋하게 됩니다. 브랜치가 병합될 때만 충돌을 해결..
개발 서버 설정 동적으로 변경 개발을 하다보면, 토큰 만료 시간을 줄여서 로그인 검증을 할 수도 있고, 토큰 만료 시간을 늘려서 배포를 할 수도 있다 이 부분을 동적으로 배포하지 않고, 변경할 수 있는 endpoint 를 열어둔다면? 당연하지만 위험은하겠지만 개발 서버기 때문에 감안할 수 있다고 생각한다 특정 secret 들을 변경할 수 있도록 열어두는 방향도 고민해봐야겠다 스레드 unit of execution 프로세스 컨텍스트 스위칭 mmu, tlb + 스레드 컨텍스트 스위칭 작업을 함 스레스 컨텍스트 스위칭 cpu 에 데이터만 바꿔끼우고, 스택만 갈아끼움 cpu bound cpu 기다리는 시간 코어 나 코어 +1 개의 스레드만 작동시키도록 권장 io bound io 작업 기다리는 시간 스레드는 상황..
우아한테크코스 미션을 하던 도중에 있던 CI/CD 에서 CD를 구축한 과정을 정리하게 되었습니다 코드는 여기서 확인하실 수 있습니다 CI/CD 란? 아주 간단한 설명을 드리겠습니다 CI(Continuous Integratoin) 지속적 통합으로, 자주자주 메인 코드베이스에 머지가 되어야 한다는 부분을 다루고 있는 부분입니다 이때 체크를 위해서 테스트를 만든다던가, 하는 과정을 거치죠 CD(Continuous Deploy) 프로덕션 환경에 자동으로 배포를 할 수 있어야 한다는 부분입니다 왜 CI/CD 가 필요한가? 우아한테크코스 환경에서는 외부에서 SSH 연결을 하지 못하게 막아두었습니다 허용해 둔다면, 어떤 사용자든 원하는 대로 SSH 연결을 해버려서, ec2를 마음대로 사용할 수 있으니 사실 당연한 거..
Oauth는 왜 나왔을까?? 바로 위와 같은 상황을 해결하기 위해서 Oauth 가 등장했는데요 그전까지는 API Access Deligation 이 있었다고 하는데요 회사마다 모두 다른 정책을 사용했기에, 웹 표준이 없어서 회사마다 다른 정책을 구현해야 했다고 합니다 이를 처음 비공식적으로 2006 년에 합의해서 나온 것이 Oauth1.0이고, 이후 보안 문제를 해결해서 나온 것이 Oauth1.0a입니다 Oauth 사용 방식의 변화 처음 oauth의 목적 위에 나왔던 것처럼 권한 부여에 목적을 가지고 등장한 프로토콜인데요 사용자의 ID와 패스워드를 타 서비스에 제공하지 않고, 구글캘린더 같은 기능을 사용할 수 있도록 하려고 했습니다 구글 캘린더 외에 Gmail 같은 서비스에 접근하는 것은 허가하지 않는 ..