전체 글

NHN FORWARD 22 발표 후기
어쩌다 발표를 하게 되었을까 지금 다니는 회사에서는 매년 NHN FORWARD라는 기술 컨퍼런스를 개최하고 있습니다. 작년에는 행사 사이트를 개발하는 스태프로 참여했었는데, 행사를 준비하면서 저도 언젠가는 발표자로 참여하고 싶다는 생각을 했었습니다. 그리고 그 생각을 까맣게 잊은채 8월이 되었고, 사내 시스템에 발표자를 모집하는 공지가 올라왔습니다. 업무가 바빠 공지를 제대로 확인도 못하고 일하고 있는 그때, 팀장님께서 DM을 주셨습니다. 🧑🏻 : 전에 하시던 데이터 수집. 정리해서 발표해보시는 게 어때요? 👶🏻 : 헉;; 막연히 언젠가 발표를 해보고 싶다는 마음은 있었지만, 쉽게 결정할 수는 없었습니다. 발표할만한 소재인지 확신이 없었고, 잘 해낼 자신도 없었거든요. 게다가 재작년, 작년과 달리 올해는..
![[코틀린 완벽 가이드] 4장 : 클래스와 객체 다루기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fz4e0A%2FbtrH2hrRuhq%2FAAAAAAAAAAAAAAAAAAAAAAJt27HpZ2NWWjytfmJ5hwxaL1hZqv1R7lWQh8vY77QL%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DFdp%252Fceuz%252Fj9P7LHoBwN65wQP4W0%253D)
[코틀린 완벽 가이드] 4장 : 클래스와 객체 다루기
클래스 정의하기 기본적으로 클래스 선언은 참조 타입(referential type)을 정의한다. 코틀린 1.3부터는 인라인 클래스(inline class)라는 개념이 도입되어 참조 타입이 아닌 타입을 정의할 수 있다. 클래스 내부 구조 class Person { var firstName: String = "" var familyName: String = "" var age: Int = 0 fun fullName() = "$firstName $familyName" fun showMe() { println("${fullName()} : $age") } } 자바 필드와 달리, 코틀린에서는 클라이언트 코드를 바꾸지 않아도 원하는 대로 프로퍼티의 구현을 바꿀 수 있기 때문에 코틀린 프로퍼티는 캡슐화에 위배되지 않..

HTML Entities 치환 라이브러리, html-entities
크로스 사이트 스크립팅(Cross Site Scripting, XSS)을 방지하기 위해 대부분 요청/응답 본문의 HTML Entities를 escape합니다. 이 때, 사용자에게 노출되는 데이터는 unescape된 데이터이어야 사용자가 입력한 그대로 보여질 것입니다. 어떤 방식이 주로 사용되는지는 모르지만, 제 경험상으로는 백엔드에서 HTML Entities를 escape 하고 프론트엔드에서 unescape 했기 때문에 위 방식으로 예를 들도록 하겠습니다. HTML Entities란? HTML에 미리 예약된 몇몇 문자를 의미하며, HTML에서 해당 문자를 사용하면 웹 브라우저는 그 문자를 다른 문자와는 다른 의미로 해석합니다. 대표적인 예로는 각각 를 의미하는 가 있습니다. 만약 아래와 같은 텍스..
![[QueryDSL] JPA에서 MySQL 비트연산하는 방법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FlvFZz%2FbtrHi4nSJDO%2FAAAAAAAAAAAAAAAAAAAAAAdH63hMK9USTDjqkKAhm7r9dK0EXk1kGchNhMc1Uy2N%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dkz6aSgbMNwvzoXLCbKkf%252BymL1uA%253D)
[QueryDSL] JPA에서 MySQL 비트연산하는 방법
서비스를 개발하다보면 쿼리에서 비트 연산이 필요한 경우가 종종 발생합니다. 이 때 MyBatis를 사용한다면 문제가 되지 않지만, JPA와 QueryDSL을 사용하고 있다면 이들이 비트 연산 기능을 제공하지 않고 있기 때문에 문제가 발생합니다. 이번 포스팅에서는 제가 MySQL + JPA + QueryDSL 환경에서 비트연산을 구현하는 과정과 결과를 소개하려고 합니다. 예시 상황 요구사항 사용자는 자신이 관심있는 취미를 여러개 선택해 저장할 수 있습니다. 관리자는 특정 취미를 선택한 사용자 목록을 조회할 수 있습니다. 샘플 코드 취미 옵션(HobbyType) @Getter @AllArgsConstructor public enum HobbyType { READING(1), SPORTS(2), MUSIC(4..
![[코틀린 완벽 가이드] 3장 : 함수 정의하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FObFFF%2FbtrAWAeaWUa%2FAAAAAAAAAAAAAAAAAAAAAOlDPiVYg70GBjI8P6TlMwHfQ6wkz2ljlMsRGiTSFzbt%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DJjIOgshJw0vpaF%252BktlUKtj90TyM%253D)
[코틀린 완벽 가이드] 3장 : 함수 정의하기
함수 코틀린 함수의 구조 import kotin.math.PI fun circleArea(radius :Double) :Double { return PI * radius * radius } fun main() { print("Enter radius : ") val radius = readLine()!!.toDouble() println("Circle area is ${circleArea(radius)}") } fun 키워드는 컴파일러에게 함수 정의가 뒤따라온다는 사실을 알려준다. 변수 이름과 마찬가지로 아무 식별자나 함수 이름으로 쓸 수 있다. 괄호로 둘러싸여 있는 콤마(,)로 분리한 파라미터 목록이 온다. 반환 타입(:Double)은 함수를 호출한 쪽에 돌려줄 반환값의 타입이다. 함수 본문은 {}로 감..
![[코틀린 완벽 가이드] 2장 : 코틀린 언어 기초](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FAv2jZ%2Fbtrz60F5jZD%2FAAAAAAAAAAAAAAAAAAAAAGQDg59kiQ_NJRegalNNXTKzZRVkRYsjcVVVgopvh-dM%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DPBk5gIRa5fJMtnDlEAMycD8xQEc%253D)
[코틀린 완벽 가이드] 2장 : 코틀린 언어 기초
기본 문법 주석 한 줄 짜리 주석 : //로 시작하며 줄이 끝나면 주석도 끝난다. 여러 줄 주석 : /*로 시작하고*/로 끝난다. KDoc 여러 줄 주석 : /**로 시작하고 */로 끝난다. 자바와 달리 코틀린에서는 여러 줄 주석을 여러 번 내포시킬 수 있다. /* * 여러 줄 주석 /* 주석 안에 내포된 주석 */ */ println("Hello") // 한 줄 주석 변수 정의 val timeInSecond = 15 val 키워드 : 값을 뜻하는 value 에서 유래했다. 변수 식별자 : 새 변수에 이름을 부여하고 나중에 이를 가리킬 때 사용한다. 변수의 초깃값 : = 기호 뒤에 온다. 코틀린에서는 줄 끝에 세미콜론을 생략해도 된다. 위 코드는 변수 타입을 지정하지 않았는데도 프로그램이 성공적으로 컴파..