본문 바로가기

전체 글172

[Side Project]회의 일정을 관리하는 회의봇 만들기 - 1 시작하며현재 다니고 있는 회사의 사옥이 옮겨진지 벌써 1달이 다 되어간다. 사옥 건물도 커지고 회의실의 개수도 이전보다 4개 더 많아졌다. 입사 이후 8개월 동안 회사에 회의실 예약 시스템이 없는 것이 항상 아쉬웠다. 2025년을 맞이하여 전 사원이 쉽게 사용할 수 있는 회의 관련 시스템을 구축하기에 앞서 관련 레퍼런스를 찾아보던 중 "카카오페이 크루들의 회의를 책임지는 죠르디 봇을 소개합니다."라는 글을 보게 되었고 현재 내가 구상하고 있는 시스템과 일치하여 해당 글을 기반으로 하여 개발을 시작하기로 마음먹었다. 혼자 진행하기에는 어려운 부분이 있을 것 같아 같은 팀 동료 3명에게 프로젝트를 함께 하자고 꼬셨는데 잘 될지 걱정이다. 그래도 다들 책임감도 강하고 실력도 좋은 분들이라 함께 하면 시너지 효.. 2025. 2. 2.
[Clean Code] 추상 도메인도메인은 우리가 해결하고자 하는 문제의 영역을 의미한다. 예를 들어, 광고 도메인이라면 광고와 관련된 문제를 해결하는 영역이고, 상품 도메인이라면 상품과 관련된 문제를 다루는 영역이다. 각 도메인은 고유의 특성과 요구사항이 존재한다. 도메인 지식도메인을 이해하고 문제를 해결하는 데 필요한 지식이다. 예를 들어 상품 도메인에서는 제품 가격 책정, 재고 관리, 배송 등의 지식이 필요하다.추상프로그램의 정의프로그램 = 데이터 + 코드데이터는 요리의 식재료코드는 식재료를 요리하는 방법즉, 프로그램은 데이터를 처리하고 다루는 방법을 정의하는 코드의 집합이다. 추상과 구체추상추상은 사물이나 개념의 여러 가지 측면 중 특정한 측면만을 선택하여 표현하는 과정이다. 중요한 정보는 남기고 덜 중요한 정보는 생략하여 .. 2024. 12. 24.
[Clean Code] 논리, 사고의 흐름 논리, 사고의 흐름공백 라인을 대하는 자세공백 라인은 단순히 비어있는 공간이 아니라 코드의 "의미 단위"를 구분 짓는 중요한 역할을 수행한다. 복잡한 로직을 처리하는 코드에서 공백 라인을 적절하게 활용하면, 각 로직의 흐름을 시각적으로 분리하고 읽는 사람이 이해하기 쉽게 도와준다.부정어를 대하는 자세부정어는 코드에서 가독성을 떨어뜨릴 수 있다. 예를들어, !isEmpty() 또는 !isValid()와 같은 부정 연산자는 직관적으로 읽기 어려운 경우가 많다. 따라서 코드를 작성할 때 부정어구를 쓰지 않아도 되는 상황인지 체크해야 한다. 부정의 의미를 담은 다른 단어가 존재하는지 고민하자! 위에서 예를 들었던 !isEmpty()는 isNotEmpty()로 변경할 수 있다.해피 케이스와 예외 처리예외 처리는 .. 2024. 12. 24.
[Java/Springboot] IntStream.range()와 IntStream.rangeClosed()의 차이 기본형 특화 스트림인 IntStream과 LongStream에는 정적 메서드인 range와 rangeClosed가 있다. 두 메서드는 특정 범위의 숫자를 차례대로 생성해 주는 기능을 가진다. public static IntStream range(int startInclusive, int endExclusive) { if (startInclusive >= endExclusive) { return empty(); } else { return StreamSupport.intStream( new Streams.RangeIntSpliterator(startInclusive, endExclusive, false), false); }}public s.. 2024. 7. 4.
[SWYP] 메서드 성능 측정을 위한 AOP 적용기 [Version]⦁ 2024.05.20 / [SWYP] 메서드 성능 측정을 위한 AOP 적용기 프로젝트를 진행하던 중 클라이언트에서 서버의 API를 호출했을 때 성능이 좋지 않은 메서드를 확인하고 싶었다. 컨트롤러의 메서드마다 시작 시간과 종료 시간을 측정하여 확인할 수 있지만 이 요구사항은 비기능적인 요구사항이기 때문에  코드를 분리하는 것이 좋다고 생각했다. 이 글은 AOP의 정의부터 실제 프로젝트에 적용한 과정까지 작성한 일대기이다. 한번 같이 확인해 보자! AOP(Aspect Oriented Programming)란?먼저, 관점 지향 프로그래밍을 알아보기 전 기존에 우리가 알고 있던 객체 지향 프로그래밍의 정의를 떠올려보자. 객체 지향 프로그래밍에서 모듈 단위는 클래스이다. 그럼 관점 지향 프로그.. 2024. 5. 20.
[SWYP] Ehcahe를 활용하여 사용자 토큰 관리하기 [Version]⦁ 2024.05.17 / [SWYP] Ehcahe를 활용하여 사용자 토큰 관리하기 현재 개발 중인 프로젝트는 토큰을 통해 사용자 인증 및 정보를 획득할 수 있다. 기존에 진행했던 방법과 개선 후 어떻게 변경되었는지 함께 확인해 보자! 먼저, 위 사진은 최초에 개발했던 구글 로그인 인증 과정이다. 간략하게 설명하면 다음과 같다.구글 로그인을 진행한다.구글 로그인 성공 시 로그인한 회원의 정보를 획득할 수 있다.획득한 정보를 바탕으로 새로운 회원 객체를 생성하고, RefreshToken과 함께 저장한다.AccessToken은 데이터베이스에 저장하지 않고 클라이언트로 전송한다.클라이언트에서 인증이 필요한 API를 호출할 때 서버에서 제공한 AccessToken을 요청 헤더에 포함하여 API를.. 2024. 5. 19.
[CS / Network] HTTP 프로토콜이란? [Version]⦁ 2024.05.16 / [CS / Network] HTTP 프로토콜의 모든 것⦁ 지속해서 업데이트 예정 웹 애플리케이션은 HTTP(Hyper Text Transfer Protocol) 프로토콜을 이용하여 서비스를 제공한다. HTTP는 클라이언트와 서버 간 데이터를 주고받기 위한 표준 규약을 정의한다. 여기서 클라이언트는 데이터나 기능을 요청하는 쪽을 의미하고, 서버는 데이터를 제공하거나 기능을 처리하는 쪽을 의미한다. 이러한 구조를 통해 웹 애플리케이션은 사용자가 요청한 정보를 서버에서 가져와 화면에 표시하거나, 사용자가 입력한 정보를 서버에 전달하여 처리할 수 있다. HTTP 프로토콜은 메시지를 통해 데이터를 주고받는다. HTTP를 통해 주고받을 수 있는 데이터는 HTML문서부터 이.. 2024. 5. 17.
[SWYP] Ehcahe를 활용하여 기상청 API 호출 성능 개선하기 [Version]⦁ 2024.05.16 / [SWYP] Ehcahe를 활용하여 기상청 API 호출 성능 개선하기 현재 개발 중인 프로젝트는 날씨와 관련된 커뮤니티를 제공하는 서비스다. 때문에, 현재 날씨에 대한 데이터를 호출하기 위해 기상청 API를 사용하였다. 나는 기상청에서 제공하는 다양한 API 중 `기상청 단기예보 조회서비스` API를 신청하였다.  기상청 단기예보 조회서비스: https://www.data.go.kr/data/15084084/openapi.do 기상청_단기예보 ((구)_동네예보) 조회서비스초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를,ww.. 2024. 5. 16.
[SWYP] @RestControllerAdvice와 @ExceptionHandler를 활용한 예외처리 [Version]⦁ 2024.05.14 / [SWYP] @RestControllerAdvice와 @ExceptionHandler를 활용한 예외처리 자바에서 제공하는 예외는 크게 두 가지 종류로 구분할 수 있다.Checked ExceptionUnchecked Exception위 두 가지 예외에 대해 자세하게 알아보고, 실제 프로젝트에 어떻게 적용하여 예외 상황에 대해 처리했는지 알아보자!Checked ExceptionChecked Exception은 java.lang.Exception 클래스를 상속받은 예외를 말한다. 이러한 예외는 개발자가 코드를 작성할 때 try-catch 구문을 사용하여 예외를 처리하거나, 해당 메서드에서 발생하는 예외를 호출하는 곳으로 던지기 위해 메서드 시그니처에 throws 키워.. 2024. 5. 16.