분류 전체보기(67)
-
Mixin in JAVA
Mixin in JAVA 믹스인은 객체지향에서 일부 코드를 클래스에 주입할 수 있는 메커니즘을 제공하는 개념입니다. 믹스인 프로그래밍이란 기능 단위가 클래스에서 생성된 다음 다른 클래스와 혼합되는 개발 스타일을 이야기합니다. 이렇게 글로만 표현하려니 헷갈릴 겁니다. 코드를 보면 금방 와닿을 겁니다. 조류(Bird)와 비둘기(Dove) 조류의 특징이 뭘까요? 아마 대부분 날다(fly)를 생각할 수 있습니다. 그렇다면 이 개념을 자바로 구현해 봅시다. Bird는 날아다니는 '행동'이 가능하니, 인터페이스로 표현하면 다음과 같을 겁니다. public interface Bird { void fly(); } 이제 구체적인 조류인 비둘기를 구현해 보죠. public class Dove { void fly() { S..
2023.05.25 -
객체지향의 사실과 오해.. 그리고 TDA(Tell Don't Ask)
운좋게 F-LAB에서 진행하는 오프라인 스터디 모임에 참여할 기회가 생겼는데, '객체지향의 사실과 오해'를 읽고 요약한 내용을 발표하고 질문을 주고받으며, 배운 내용을 실무에 어떻게 적용하는지에 대한 사례를 짚어보는 과정으로 스터디를 진행했습니다. 이번 시간에는 5장 '책인과 메세지'에 대한 내용을 짚어보던 중 책임주도설계와 TDA(Tell Don't Ask)에 대해 배웠고 해당 내용을 복습하고자 이 게시글을 작성해가 되었습니다. 객체지향 프로그래밍에서 활용되는 원칙으로 'TDA 원칙'이라고도 합니다. 직역하자면 "묻지 말고 그냥 시켜라"가 되겠습니다. 이는 협력관계에 있는 객체끼리는 정보를 요구하지 말고 그냥 시키라는 의미로 해석할 수 있습니다. 정보를 요구하지 않는다는 점에서 '정보 은닉'의 중요성을..
2023.05.23 -
오픈소스 라이센스의 종류과 적용범위
오픈소스를 살펴보면 누구나, 가져다가 사용해볼 수 있고 원한다면 기여도 해볼 수 있다. 이러한 오픈소스는 학습 목적으로는 상관없지만, 회사 프로젝트에 적용하여 상용으로 활용하려는 순간 주의해야할 부분이 몇개 있는 듯 하여, 생각날때마다 보려고 이렇게 글로 정리해본다. 소프트웨어 라이센스? 소프트웨어 라이센스는 소프트웨어를 사용, 수정, 배포할 수 있는 권한을 규정하는 계약을 일컫는다. 소프트웨어 라이센스의 종류는 다음과 같다. 상용 소프트웨어 라이센스 : 사용자가 소프트웨어를 구매하여 사용할 수 있는 라이센스이다. 대표적으로 윈도우 OS, 오피스 스위트, 어도비의 포토샵 오라클 등이 있다. 오픈 소스 소프트웨어 라이센스 : 소스 코드를 공개하고 누구나 수정하고 배포할 수 있는 라이센스다. 대표적으로는 G..
2023.05.15 -
DB와 애플리케이션간의 동시성 이슈 발생 및 해결과정
예전에 취업 준비를 하던 시절, 개발 선배 혹은 면접에서 자꾸 CS의 중요성을 강조하다보니, 그냥 하라니까 하는.. 다소 막연한 이유로, CS 공부를 병행했었다. 그런데, 이번에 실무를 진행하면서, 원인을 알 수 없는 버그를 고치기 위해, 여러 가지 시나리오를 가정하고 해결해 가는 경험을 갖게 되었다. 이 과정에서 CS에 대한 이해도의 중요성을 새삼 깨닫게 되어, 이렇게 글로 정리해보기로 한다. 1. 상황 사내 프로젝트로 제2 금융권 커머스 앱에 적용할 NFT 마켓 api 개발중, 이더리움 노드 모니터링 에이전트가 제대로 동작하지 않는 이슈가 발생했다. 개발 환경에서 돌아가는 노드는 총 4개로 각 노드별로 서버의 리소스 점유율 및 블록체인 정보를 모니터링하는 에이전트가 설치되어 있다. 정상적이라면 총 4..
2023.04.05 -
[SpringBoot/RestDocs] Kotlin/Spring boot 3.0.4 환경에서 restDocs 구성하기
일일이 읽으면서 파악하기 귀찮으신 분들은 바로 맨 아래 '5. restDocs Gradle cheatSheet'를 참고하세요. SpringBoot는 편리함을 목적으로 Spring initializer를 활용한다. 2.x.x 시절에 Java/Spring 환경에서 작업할 때는 별 문제가 없었다. 그런데, SpringBoot 3.0.0+Kotlin으로 갈아타는 순간부터, Spring initializer가 기본적으로 해주는 설정에 뭔가 하나씩 문제가 생기고 있었다. Rest Docs도 그 중 하나였고 삽질을 너무 중구난방으로 하여, 한번 정리할 목적으로 이 글을 작성해 본다. 1. gradle의 plugins 정리하기 시작부터 build.gradle.kts에 빨간 줄이 그어진다... 왜냐면, 이니셜라이져가 설..
2023.03.22 -
비밀번호 입력.. 꼭 그렇게까지 해야 속이 후련할까?
Overview 회원가입을 진행하기위해 플로우 차트를 작성하던 중, 비밀번호 입력 제약에 대해 고민하게 되었다. 일반적으로 대부분 서비스들을 살펴보면, 비밀번호 입력시 다음과 같은 패턴을 강요한다. 최소 10자이상 영문 대소문자 숫자 특수문자 이러한 패턴을 강요하는 과정이 보안을 강화시켜줄 수 있겠지만, 결과적으로 사용자 경험을 낮추는 요소가 될 수 있을 듯하여, 해당 내용을 조사하고 상황을 다시 정의해보고자 한다. 위와 같은 비밀번호 패턴이 발생한 이유 아무리 개인정보 보안을 강화하기 위해서라지만, 너무 복잡하다. 사용자 경험 개선을 위해, 이 패턴을 없앨 수 있는지 확인을 해볼 필요가 있다. 먼저 이러한 패턴이 생긴 이유를 살펴보자. 범인(?)은 빌 버(Bill Burr) “NIST Special P..
2023.02.03