코틀린에서는 Sequences라는 표준 라이브러리가 존재하는데 해당 라이브러리에 대해 알아보도록 하겠습니다.Sequences코틀린에는 일반적으로 동일한 유형 및 객체를 포함하는 Collections 표준 라이브러리가 존재합니다. List, Set, Map 타입이 존재하고, 인터페이스는 아래의 사진처럼 나타낼 수 있습니다.코틀린에는 컬렉션과 함께 또 다른 표준 라이브러리인 Sequences가 있습니다. 코틀린 시퀀스는 요소를 포함하지 않고 반복하는 동안 요소를 생성합니다. 자바의 Stream처럼 지연(lazy) 연산이 가능하다는 것은 동일하지만, 몇 가지 차이점도 존재합니다.stream 이후에 나온 sequence는 확장 함수를 사용해 정의되어 있어 더 많은 처리 함수를 가지고 있다.stream은 멀티 코..
'지금까지 날 도와준 이들 이름 하나하나 빠짐없이 여기에 남기기 위해'라는 가사가 와닿는 노래인 CREDIT과 함께 지금까지의 삶 중 가장 간절하고 치열했고 인상 깊었던 2023년의 기억을 남기기 위해 회고를 작성해보려고 한다. 서울 생활 시작 2023년은 김해 청년의 서울 생활로 시작했다. 2월 졸업을 앞두고 당장 취업할 자신도 없었고, 실력도 없었다. 이에 대한 고민들을 가지고 앞으로의 계획에 대해 많이 방황했던 것 같다. 부모님과도 많은 얘기 끝에 1년 정도 추가적인 지원을 해주겠다고 하셔서 방향을 찾아보기로 했다. Thanks For University Friends 운이 좋게도 대학교를 다니는 동안 귀중한 인연들을 많이 만날 수 있었고, 그 인연들과 뜻깊은 경험을 많이 해보았다. 첫 프로젝트는 ..
Entity를 생성할 때 위도, 경도와 같이 비슷한 유형의 데이터를 하나로 묶어 사용하거나 특정 필드에 대한 로직을 분리하고자 할 때 @Embeddable을 통해 값 객체를 생성하여 사용합니다. 이때 NullPointerException이 발생할 수 있는데 문제가 발생할 수 있는 상황과 해결할 수 있는 방법에 대해 정리해보고자 합니다. 문제 @Getter @Entity @Table(name = "member") @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member extends AuditingEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name =..
사이드 프로젝트인 Foodbowl 앱의 서버 개발을 진행하면서 회원을 관리하기 위한 회원가입/로그인 기능이 필요하였습니다. 회원가입/로그인 기능을 위해 Apple OAuth 방식을 선택하게 되었는데, 선택 과정과 구현 과정을 기록하기 위해 글을 작성하게 되었습니다. 하나의 글로 작성하기에는 많은 내용이 담길 것이라 생각되어 여러 개의 글로 나누어 정리해보고자 합니다. OAuth 선택 이유 OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로써 사용되는, 접근 위임을 위한 개방형 표준이다. 다시 말해서, 사용자는 각각의 서비스에 로그인하는 것을 피하고 한 번의 로그인으로 여러 서비스를 이용할 수 있게 된다. 카카오, 네이터, 구글, ..
진행하고 있는 프로젝트에서 테스트 데이터베이스 환경을 H2가 아닌 MySQL로 구성하였다. 따라서 CI를 진행할 때 동작하고 있는 MySQL 서버가 필요로 하게 된다. CI는 Github Action을 통해서 진행하는데, Github Action은 워크플로우가 실행될 때마다 매번 새로운 환경을 구성하기 때문에 워크플로우에서 프로젝트에서 정의한 테이블 정보를 가지고 있는 MySQL을 실행시켜 주는 작업이 필요하다. Github Action에서 MySQL 실행을 도와주는 도구가 존재했지만, MySQL 서버를 설정하고 실행만 시켜주기에 테이블 생성과 같은 데이터베이스 초기화를 위해 추가적인 작업이 필요했다. 다른 방법을 추가적으로 고민하다 테이블 정보를 담은 DB 도커 이미지를 Github Action에 가져..