logo
logo
언어
Kotlin
자바가 실행되는 환경에서 자바를 대체할 수 있도록 개발된 언어
StackOverflow 질문 수: 95635
Github Stars : ★ 47556
사용 기업
직장
금융/보험
패션
교육
이커머스
소셜/컨텐츠
부동산/인테리어
여행
기타
푸드테크
모빌리티
헬스케어
인공지능
종합
블록체인
techstack-logo
플렉스
techstack-logo
렌딧
techstack-logo
토스랩
techstack-logo
핀다
techstack-logo
드라마앤컴퍼니
techstack-logo
딜리셔스
techstack-logo
뤼이드
techstack-logo
에이블리
techstack-logo
트렌비
techstack-logo
드림어스컴퍼니
techstack-logo
스푼
techstack-logo
클래스101
techstack-logo
디셈버앤컴퍼니
techstack-logo
직방
techstack-logo
당근
techstack-logo
마이리얼트립
techstack-logo
버킷플레이스
techstack-logo
와디즈
더 보기
기술 블로그 글
카카오페이
여러 제휴사와 연동하는 신규 프로젝트 개발기 2편
안녕하세요, 카카오페이 보험마켓파티의 카펀입니다. 카카오페이 자동차보험 비교 서비스를 개발하며 마주한 문제와, 이들에 대한 고민을 소개하고 있습니다. 1편에서는 여러 제휴사 관리를 위한 공통 구조, 여러 제휴사를 호출할 때의 병렬 및 비동기 처리에 대해 소개해 드렸습니다. 2편에서는 사용자 입력에 대한 검증과 테스트 코드를 작성하는 방법에 대해 다루어 보겠습니다.🔗 여러 제휴사와 연동하는 신규 프로젝트 1편사용자 입력과 유효성 검증은 어떻게 다루어야 할까?유효성 검증을 하는 이유서비스를 매우 단순히 생각해 보면, 사용자는 아래와 같은 흐름으로 사용하게 됩니다.• 사용자는 클라이언트에 필요한 값을 입력한다.• 클라이언트는 서버에 값을 전달한다.• 서버는 제휴사에 값을 전달하고, 응답을 받는다.• 서버는 클라이언트에 응답을 보낸다.• 클라이언트는 사용자에게 응답을 보여 준다.이 중에서 눈여겨보고자 하는 단계는 ‘클라이언트는 서버에 값을 전달한다’ 단계입니다. 사람이 입력한 값을 시스템에 전달하는 과정이다 보니, 입력 가능한 값의 범위를 엄밀하게 정의해 두지 않으면 온갖 잘못된 값이 들어올 수 있습니다. 이렇게 잘못된 값이 들어오기 시작하면, 예상치 못한 동작의 원인이 되거나, 서버로부터 받은 응답을 신뢰할 수 없게 됩니다.사용자의 입력을 검증하는 것 역시 크게 두 가지로 나눌 수 있습니다.• 사용자의 입력을 클라이언트에서 검증하고, 잘못된 입력에 대해서는 경고를 표시한다.• 클라이언트에서 전달하는 값을 서버에서 검증하고, 잘못된 입력에 대해서는 Client-Error로 응답한다.이 중 어떤 방법을 선택하는 것이 좋을까요? 저는 둘 다 병행해야 한다고 생각합니다. 각기 검증의 역할과 목적이 다르기 때문인데요.클라이언트의 경우에는, 잘못된 입력값에 대해 사용자에게 알려 주고, 올바른 값을 선택할 수 있도록 안내하기 위한 검증을 진행합니다. 동시에 잘못된 값이 서버로 넘어가는 것을 막아 주는 역할을 합니다.서버의 경우에는, 입력값이 시스템으로 전달되기 전에 마지막으로 확인을 하는 역할입니다. 이 단계에서 검증을 통과하지 못하면 애플리케이션이 정상 진행될 수는 없지만, 상대적으로 더 엄격하고 확실하게 검증할 수 있습니다.서버 단계 검증이 특히 중요한 이유는, 클라이언트에서 의도와 상관없이 잘못된 값을 넘겨줄 수도 있다는 점입니다. 여러 경우의 수가 겹치다 보면, 클라이언트의 검증이 완벽하지 않을 수 있습니다. 예상하지 못한 사용자의 입력이 가능한 경우에도, 서버에서 이를 최종 확인해서 막아야 합니다. 또한 클라이언트는 사용자에게 노출되어 있기 때문에, 나쁜 의도를 가지고 서버에 잘못된 값을 보내도록 조작하는 등의 리스크 역시 존재합니다. 서버 단계에서의 검증을 통해 이러한 리스크를 줄일 수 있습니다.Kotlin Contracts는 Kotlin 1.3에서 추가되었습니다. 주된 역할은, 코드 분석 시 컴파일러가 모르는 정보를 사용자가 알고 있을 때, 그 정보를 알려주는 것입니다.이를 잘 이용한 것이 Kotlin의 , 와 같이 조건을 검증하는 것입니다.
kotlin
SK텔레콤
[Kotlin] QueryDSL JPA 프로젝트에서 TroubleShooting하기
안녕하세요, T멤버십서비스팀 Backend 개발자 이연주입니다.현재 에이닷에서 T멤버십 혜택 및 이벤트 정보를 접할 수 있는데요.T멤버십서비스팀에서 backend 개발자는 고객이 사용하는 Application뿐만 아니라 에이닷과 같은 내부서비스에 전반적으로 T멤버십 데이터를 제공하고 처리하는 업무를 하고 있습니다.현재 포인트 시스템 마이그레이션 프로젝트에 참여하여 외부 시스템에 포인트 데이터를 전달하고 처리하는 컴포넌트를 맡았습니다.해당 컴포넌트는 기존에 Java, Spring boot, Oracle, Mybatis로 개발되어 신규 컴포넌트를 생성하여 Kotlin, Spring boot, Jpa, Querydsl 환경에서 개발하고 있습니다.이번 글에서는 신규 컴포넌트(프로젝트)에서 환경세팅 및 개발하면서 트러블 슈팅한 내용을 공유하고자 합니다.Kotlin에서 클래스, 메서드, 프로퍼티는 default 로 final이며 상속이 불가능합니다.Kotlin + Spring boot프로젝트에서 Spring Data JPA를 사용할 때, Repository 클래스에 open 키워드를 사용하는 것이 일반적입니다.그 이유는 다음과 같습니다.• None 스프링은 프록시를 사용하여 AOP(Aspect-Oriented Programming) 기능을 구현하거나 트랜잭션 관리를 위해 프록시를 생성합니다. 하지만 코틀린에서는 기본적으로 클래스가 상속이 가능한(open인) 상태여야만 프록시를 생성할 수 있습니다.• None 스프링 데이터 JPA 등 확장 라이브러리와의 호환성 많은 스프링 기반 라이브러리는 클래스를 상속하여 기능을 확장하거나 프록시를 생성하여 런타임에 동작을 제어합니다. 따라서 코틀린으로 작성된 클래스가 이러한 라이브러리와 호환되려면 open 키워드를 사용하여 상속이 가능한 클래스로 선언되어야 합니다.• None 다형성을 위한 필요성 스프링은 인터페이스와 클래스를 이용하여 다형성을 활용합니다. 따라서 @Repository로 선언된 클래스가 상속 가능해야 하며 이를 위해 open 키워드를 사용합니다.스프링부트에서는 allopen이라는 플러그인을 제공합니다.다음과 같이 all-open을 적용하면, @Repository 애노테이션이 붙은 클래스를 자동으로 open 클래스로 만들어줍니다.신규프로젝트에서 다음과 같이 build.gradle.kts에 플러그인을 추가해서 사용하고 있습니다.위와 같이 설정하면, @Repository 애노테이션이 붙은 클래스는 자동으로 open 클래스로 컴파일됩니다.allopen 플러그인을 사용하면 개발자가 직접 클래스와 메서드에 open 키워드를 작성하지 않아도 된답니다.신규 프로젝트에 QueryDsl 관련 Config를 만들어 JpaQueryFactory를 주입해서 사용하고자 했습니다.JPAQueryFactory는 Spring Data JPA에서 제공하는 쿼리 빌더로, JPQL을 사용하여 쿼리를 작성하고 실행할 수 있습니다.Repository 클래스에서 JPAQueryFactory를 사용하려면, 주 생성자의 매개변수로 JPAQu
java
kotlin
spring
라인
린트 적용으로 코드 대량 변경 시 AST를 이용해 검증하기
린트 - 보다 아름다운 코드를 위하여안녕하세요. LINE+의 Mobile Productive & Research 팀에서 Android 관련 라이브러리 및 개발 환경 개선 맡아서 진행하고 있는 윤종민입니다.지난 연말, ktlint 업데이트 작업(0.5.0 → 1.0.1)을 진행했습니다. 사내에서 Kotlin으로 개발하는 많은 분들이 코드를 새로 작성하거나 수정하면서 기존 코딩 규칙(ktlint 0.5.0)에 맞춰 저장소에 반영하려고 할 때 무결성 검증 과정에서 예상치 못한 오류 메시지가 발생해 당황하셨을 것 같습니다. 이전에는 아무런 문제 없이 진행됐던 과정인데 ktlint를 업데이트하고 난 후 오류로 지적돼 코딩 규칙 검증이 조금 더 엄격해진 것을 체감하셨으리라고 생각합니다.일단, 여기서 언급되는 ktlint라는 도구가 생소한 분도 계실 텐데요. 이 도구의 역할인 '린트'가 무엇인지부터 알아보겠습니다.오래된 스웨터의 보풀 같은 것을 린트라고 합니다. 보풀이 많으면 옷이 보기 좋지 않은데요. 코드에도 이런 보풀이 있습니다. 들여쓰기를 맞추지 않은 경우나 선언한 변수를 사용하지 않은 경우 등이 그렇습니다. 보풀이 있는 옷이라도 일단 입을 수는 있듯이, 보풀이 있는 코드로 만든 애플리케이션도 작동 그 자체에는 문제가 없습니다. 하지만 그런 애플리케이션은 점차 코드의 가독성이 떨어지면서 유지 보수하기 어려운 애물단지가 되어 버리기 쉽습니다. 옷의 보풀을 제거하기 위한 보풀 제거기(lint roller)처럼, 코드의 오류나 버그 등을 점검하고 정해진 코딩 컨벤션을 잘 지켜 개발하고 있는지 확인하기 위한 정적 분석 소프트웨어가 있는데요. 이를 린트 또는 린터(linter)라고 부릅니다.린트가 필요한 이유소프트웨어 개발 회사에서는 하나의 프로젝트에 여러 명의 개발자가 투입돼 같은 코드를 함께 작업합니다. 이때 코딩 규칙을 정해 놓으면 코드의 가독성이 높아지고, 이를 통해 개발의 효율성을 높일 수 있습니다.그런데 이런 규칙을 문서로만 정의하면 과연 잘 지켜질까요? 아마 그렇지 않을 것입니다. 규칙을 기억하지 못하거나 실수로 어기는 경우도 많을 것이고, 규칙을 잘못 이해하고 적용하는 상황이 발생할 수도 있습니다. 이를 방지하기 위해 코딩 컨벤션 오류를 지속적으로 확인해서 미리 알려주는 플러그인 또는 프로그램이 바로 린트입니다.또한 린트는 구조적인 문제를 일으켜 안정성과 효율성에 영향을 미치거나 코드 관리에 지장을 줄 가능성이 있는 코드를 찾을 수 있습니다. 예를 들어 XML 리소스 파일에 사용되지 않는 네임스페이스가 있다면 쓸데없이 공간을 차지하고 불필요한 처리가 발생합니다. 또는 지원 중단된 요소나 타깃 API 버전에서 지원하지 않는 API 호출을 사용하는 등의 구조적 문제가 발생하는 경우 코드가 올바르게 실행되지 않을 수 있습니다. 린트를 사용하면 이런 문제를 해결할 수 있습니다.ktlint는 Kotlin 언어로 작성된 코드의 코드 스타일을 확인하고 싶을 때 이용하는 툴입니다. 코드 스타일에 맞지 않는 코드를 자동으로 수정해 주는 기능이 있어서 보다
kotlin
다나와
다나와에서 어떻게 사용하고 있나요?
다나와 Kotlin을 만나다!안녕하세요. 다나와 검색 파트 장민규, 오피스 파트 윤성현, 이주영입니다.다나와에는 많은 기술 스택을 보유 하고 있습니다. Java, PHP, Go, Python 등 다양한 언어를 사용하고 있으며, 최근에는 Kotlin을 도입하여 사용하고 있습니다. 이번 포스팅에서는 Kotlin을 도입하게 된 이유와 어떻게 사용하고 있는지 소개하겠습니다.왜 Kotlin을 사용하게 되었나요?장민규: Kotlin을 시작하게 된 이유 단순했습니다. ‘요즘 코틀린이 유행이라고?’ 때문인데요 22년도 말에 Kotlin을 도입하는 회사가 차츰 늘어나기 시작하였고 저도 Kotlin에 호기심이 생겨 Kotlin을 학습하고 사용하다 Kotlin의 매력에 빠지게 되었습니다. 일단 Java와 비슷하면서도 Kotlin만의 간결함 그리고 다른 언어들의 장점만 전부 때려 넣은듯한 언어였습니다. 거기다 Java와 호환성 문제가 없어 혼합해서 사용해도 문제가 없고 또한 null-safety 는 몰론 함수와 , 같은 Kotlin만의 유용한 함수들이 있어서 더욱 매력적이었습니다.한번 상품 명과 가격이 제대로 들어왔는지 검증하는 코드를 Java와 Kotlin 각각 비교해 보겠습니다.require 함수는 Kotlin 표준 라이브러리에 있는 함수로 조건을 만족하지 않으면 IllegalArgumentException을 발생시킵니다.단장 위 두 코드를 보면 Kotlin 코드가 더 간결하고 가독성이 좋습니다. null-safety 그리고 각종 유용한 함수가 지원하기 때문입니다.이러한 이유들로 Kotlin에 매력에 빠져 Kotlin을 학습하고 사용하게 되었습니다.무엇보다 Go에 이어 Kotlin의 마스코트가 귀여워서는 비밀입니다. 😊성현, 주영: 처음에 민규님이 Kotlin을 도입하자고 발표하기 전까지는 Kotlin이란 언어에 대해서 잘 몰랐습니다. 하지만 민규님의 Kotlin에 대한 설명을 듣고 Java와 비교해 보니 Kotlin이 더 간결하고 가독성이 좋다는 것을 알게 되었습니다. 그렇게 Kotlin에 관심을 가지고 있을 때 민규님이 Kotlin 스터디를 모집하였고 저희도 참여하게 되었습니다.Kotlin 스터디를 진행하면서 Kotlin의 장점을 더욱 느끼게 되어, 새로 개발할 프로젝트에 Kotlin을 도입하게 되었습니다.다나와에서 Kotlin은 어떻게 도입되었나요?장민규: 다나와에서 Kotlin의 시작은 저였습니다.사진과 같이 ppt로 Kotlin을 소개 자료도 만들어 발표하고 위키에도 여러 장점들을 작성하였습니다. 지금 같이 포스팅하고 있는 성현님과 주영님 그리고 Kotlin에 관심을 가진 팀원들과 함께 제 주도하에 스터디를 진행하기도 했습니다. 퇴근 후, 주말에 개인 시간을 사용하여 기존 Java 프로젝트에 Kotlin을 추가하여 신규 기능은 Kotlin으로 개발하는 방법, 기존 Java 코드를 Kotlin으로 마이그레이션 하여 다른 언어를 도입하는 것보다 리스크가 낮고 안정성이 높은 걸 입증하면서 Kotlin을 도입하게 되었습니다.다나와에서
elasticsearch
java
kotlin
Copyright © 2024. Codenary All Rights Reserved.