-
Index TOP NEW
Index란? 안녕하세요. Kernel 360 백엔드 2기 크루 송해덕입니다. DB를 사용할 때 "Index를 잘 활용해야한다.", "Index를 걸어라" 라는 이야기들을 듣지만 이 Index가 무엇이고 어떻게 동작하는지 명확하게 아시나요? 오늘은 Index란 무엇이며 Index를 어떻게 사용해야 하는지 알아보는 시간을 가지도록 하겠습니다. Index란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조를 말합니다. 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는 것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞에 ... Read More
-
WebSocket TOP NEW
WebSocket 프로젝트에서 채팅을 구현할 때 WebSocket을 사용했다. 물론 HTTP를 사용해서 채팅을 구현 할 수는 있는데 왜 WebSocket을 사용해야 했었고 실시간 통신에는 WebSocket이 더 효율적인 선택인지 설명할거다. 🔥 WebSocket: 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜 특징 일반 Socket 통신과 달리 HTTP 80 Port를 사용해서 방화벽에 제약이 없다 접속까지는 HTTP 프로토콜을 이용하고, 그 이후에는 자체적인 WebSocket 프로토콜로 통신 HTTP 통신의 특징인 (연결... Read More
-
세션과 JWT TOP NEW
인증과 인가란? 세션과 JWT에 대해서 설명드리기 전에 인증과 인가에 대해서 말씀드리겠습니다. 인증이란 Authentication 으로 사용자 또는 장치의 신원을 확인하는 과정입니다. 예를 들어 어떤 서비스를 이용하기 전에 아이디와 패스워드를 입력해서 서비스가 사용자의 신원을 확인하는 과정을 인증이라고 합니다. 인가는 Authorization 으로 사용자가 어떤 리소스에 접근할 수 있는지 또는 어떤 동작을 수행할 수 있는지 검증을 하는 것을 의미합니다. 예를 들어 무신사에서 상품을 삭제하는 기능을 사용자가 사용할 수 있는지 권한을 확인하는 과정을 의미합니다. 저희가 서비스를 개발할 때 인증과 인가를 사용해서 현... Read More
-
동시성 문제를 겪으며 해결한 경험 TOP NEW
안녕하세요. kernel360 크루 양상원입니다. 파이널 프로젝트를 진행하면서 겪었던 동시성 문제에 대해 해결했던 경험에 대하여 이야기를 진행하고자 합니다. 동시성을 겪었던 상황 프론트에서 태그 이름을 한글로 입력하는 과정에서 0.03초 안에 생성 요청이 2번이 발생하였습니다. private void validateDuplicateTagName(Long userId, String name) { if (tagDataHandler.checkDuplicateTagName(userId, name)) { throw ApiTagException.TAG_ALREADY_EXIST(); } } 위... Read More
-
도커 컨테이너 TOP NEW
도커 컨테이너 안녕하세요. kernel360 크루 김민규입니다. 이번 글에선 도커 컨테이너에 대해 이야기해보겠습니다. 컨테이너 = 리눅스 프로세스 도커 컨테이너는 가상머신이 아니라 리눅스 프로세스입니다. 도커는 리눅스의 커널이 제공하는 기술을 활용합니다. “컨테이너는 리눅스 프로세스이며, 도커는 리눅스 커널이 제공하는 기능을 사용하는 API 데몬이다.” <Red Hat 컨퍼런스 발표 영상> 그래서 윈도우, 맥에서는 다음의 과정을 거쳐 도커가 실행됩니다. 윈도우나 맥OS의 하이퍼바이저 가상화 기술을 사용하여 윈도우/맥OS에서 리눅스 가상머신을 실행. 실행된 ... Read More
-
RDB에 순서가 있는 데이터를 저장하는 방법 TOP NEW
RDB에 순서가 있는 데이터를 저장하는 방법 TechPick 프로젝트를 진행하며 순서가 있는 데이터들을 RDB(MySQL)에 저장해야하는 상황을 자주 마주쳤습니다. 사용자가 등록한 태그의 순서를 저장 폴더안에 다른 폴더와 픽들의 순서를 각각 저장 픽에 속하는 태그들의 순서를 저장 RDB에 순서를 가지는 데이터들을 어떻게 저장할지 고민했던 방법을 소개하려고 합니다. 첫번째 시도 : Delete all & Insert all 가장 단순한 방법입니다. 테이블 안에서 각 아이템들이 순서를 가지게 저장하기때문에 별도의 순서 컬럼이 필요 없습니다. 하지만, 순서 변경이 발생했을때, 관련된 아이... Read More
-
TypeScript로 안전하게 API 호출하기 TOP NEW
프로젝트에서 백엔드와의 통신을 위해 fetch API를 활용하여 코드를 구현했습니다. GET API 요청을 위한 코드는 아래 사진과 같이 작성했습니다. const response = await fetch(`${BASE_URL}/clubs/${clubId}/clubMembers`, { method: "GET", headers: { "Content-Type": "application/json" }, credentials: "include", }); if (!response.ok) { throw new Error("멤버 정보 조회에 실패했습니다."); } return response.json(); ... Read More
-
로깅을 통해 서비스 관리하기 TOP NEW
들어가는 말 프로젝트를 진행하며 기능 개발에 많은 시간을 할애합니다. 그러나 만들고 나서가 끝일까요? 지속적인 유지 보수와 함께 안정적인 서비스 제공 및 신규 유저 유입, 유저 이탈을 막기 위해 사용성과 관련된 다양한 요소를 파악하고 더 나은 방향으로 나가야할 것입니다. 프로젝트를 진행하며, 단순한 개발에서 끝이 아닌 사용자의 사용성과 관련된 요소를 가설을 세우고 검증하는 과정에 대해서 이야기해 보고자 합니다. 로깅이란? 제품을 개발하며 사용자의 움직임 서비스 사용 흐름 등을 예상하고 가설을 세웁니다. 이런 가설은 기획 당시의 서비스 이용 대상, 핵심 기능, 타서비스와의 차별점 등 다양한 요소에 전반적으로... Read More
-
Optimistic update 적용하기 TOP NEW
문제상황, 버튼을 눌렀는데 바로 하이라이팅이 안 되는데? 저희 프로젝트에는 북마크를 추가하면 문장에 하이라이트 색깔이 입혀지는 기능이 있습니다. 그런데 아래 사진을 확인하면 알 수 있듯이, 형광펜 버튼을 누르자마자 하이라이팅이 생기지는 않습니다. </br> 형광펜을 설정하는 api가 성공 요청을 보내야만 하이라이팅이 칠해지는 과정을 가지고 있습니다. api응답이 중간에 실패할 수도 있으니 성공(success)이라는 응답을 받고나서야 하이라이팅이 적용되어야하는게 어떻게 보면 아주 당연한 작업이기도 하죠. 그러나 사용자에게 보여주는 화면에서 이렇게 응답이 올 때까지 기다리는 것은 많은 경우에... Read More
-
AWS 프리티어 효율적으로 사용하기 TOP NEW
안녕하세요, Kernel360 크루 이강민 입니다. 오늘 포스팅에서는 AWS 프리티어를 효율적으로 사용하는 방법에 대해 이야기해보려고 합니다. 왜? 이번 내용을 준비한 이유는 개인적인 프로젝트나 실험적인 프로젝트를 진행 할 때 AWS 환경에서 최저의 비용으로 운용하여 장기간 서버를 유지하고자 할 필요성을 느꼈기 때문에 준비했습니다. 우리의 자원은 생각보다 넉넉하지 않죠 😰 비용을 절감하는 방법 사실 가장 확실한 방법은 홈서버를 운용하는 겁니다. 하지만 이 방법에는 여러 문제가 있습니다. 초기 구성하기가 어렵다. 사실 한번 세팅해본 분은 알지만 여간 까다로운게 아닙니다. 공유기 세팅부터 컴퓨터 운영... Read More
-
monorepo에서 vscode jest extension 환경 설정 TOP NEW
Jest란? Jest는 메타(구 페이스북)에서 개발한 자바스크립트 테스트 라이브러리입니다. 간편하게 테스트를 할 수 있어 자바스크립트 개발자들에게 많이 사용되고 있습니다. Jest vscode extension Jest는 cli를 이용해서 jest 실행 명령어를 통해 테스트를 실행할 수 있습니다. jest, jest <특정 파일>, jest --watch 등의 커맨드에 명령어를 입력해도 되지만, vscode에서는 더 간단하게 jest를 실행할 수 있는 extension이 존재합니다. jest extension은 jest 명령을 찾을 수 있으면 기본적으로 실행 시 watch mode에서 모든 ... Read More
-
API Cancelled 문제 해결하기 TOP NEW
1. 이런 글을 쓰게 된 배경 최근 진행한 프로젝트에서 평소처럼 form에 데이터를 보내는 Button을 누르면 API호출이 이뤄지는 로직을 구현하고 있었습니다. 그런데 이번에는 API호출이 되지 않고, 콘솔창에 API Cancelled라는 메시지가 뜨는 것을 확인할 수 있었습니다. 이 글에서는 API cancelled 문제가 일어난 배경과 그 문제를 해결하는 과정을 설명하려 합니다. 2. 구체적인 상황 및 코드 // 앞 부분 생략... const handleNicknameChange = () => { updateUserInfo({ nickname }); //tanstack query funct... Read More
-
OpenAPI TypeScript로 API 타입 관리 자동화하기 TOP NEW
API 통신을 사용하는 애플리케이션에서 수행되어야 하는 작업 중 하나는 프론트엔드와 백엔드가 어떻게 데이터를 주고 받을지 협의하는 것입니다. 이를 위해 문서화 작업을 수행하는데, 그 방법 중 하나가 Swagger를 사용하여 OpenAPI 사양을 작성하는 것입니다. 백엔드 개발자가 Swagger로 문서화 작업을 진행하면, 프론트엔드 개발자는 이 문서를 참고하여 주고받아야 할 데이터의 구조를 파악할 수 있습니다. 특히 TypeScript를 사용하는 프론트엔드 개발자의 경우, 이 문서를 바탕으로 데이터에 대한 정확한 타입을 지정할 수 있어 더욱 유용합니다. 이렇게 Swagger를 통해 프론트엔드와 백엔드 간의 데이... Read More
-
Floating UI 소개 TOP NEW
Floating Element란? Floating Element는 화면의 기본적인 문서 흐름에서 벗어나서, 다른 콘텐츠 위에 배치되는 UI 요소들을 말합니다. 보통 사용자가 특정 상호작용을 할 때 동적으로 나타나며, 화면의 특정 부분에 위치해 있거나, 특정 기준 (마우스 위치, 텍스트 필드 등)에 따라 위치가 조정됩니다. 여기서 말하는 floating element의 예시는 다음과 같습니다. Tooltip: 마우스를 특정 요소에 올렸을 때 나타나는 간단한 설명 텍스트. Popover: 사용자가 클릭했을 때 더 복잡한 정보를 표시하는 작은 팝업. Select Menu: 사용자가 선택할 수 있는 옵션... Read More
-
Feature-Sliced Design (FSD) 소개 TOP NEW
들어가며 대규모 프론트엔드 애플리케이션을 개발하면서 가장 큰 도전 과제 중 하나는 확장성과 유지보수성입니다. 프로젝트가 커질수록 구조가 복잡해지고, 기능 추가나 변경이 기존 코드에 의도치 않은 영향을 미칠 가능성이 커집니다. 이런 상황에서 Feature-Sliced Design(FSD) 은 유용한 아키텍처 패턴으로, 각 기능을 독립적이고 재사용 가능하게 모듈화하여 관리할 수 있도록 도와줍니다. 이번 글에서는 FSD의 기본 개념을 소개하고, 도입을 고민하는 분들을 위해 그 장점과 도입 시 유의해야 할 점들에 대해 알아보겠습니다. 왜 Feature-Sliced Design인가? 기존의 프론트엔드 구조는 주... Read More
-
웹 접근성을 알아보자 TOP NEW
들어가는 말 자기소개를 하는 멘트에 저는 “UX측면에 신경을 많이 쓴다.”라고 이야기 합니다. 그런데 어느 날, 답변에 대한 후속 질문으로 “디자이너가 동일한 디자인 파일을 넘겨주었을 때, 개발자는 어떻게 하면 스스로의 역량을 가장 잘 나타낼 수 있을까요?”라는 질문을 받았습니다. 그에 대한 답을 고민하던 중 웹 접근성에 대해 알게되었습니다. 웹 접근성이란 무엇인지 어떤 이점이 있는지 이야기해보려 합니다. 웹 접근성을 영어로 표현하면 “Web Accessibility”라고 하고, 이를 짧게 줄여서 a11y라고 표현하기도 합니다 개발자가 고려할 수 있는 UX 성능 최적화 이... Read More
-
Yarn Berry로 전환해야 하는 이유 TOP NEW
들어가며 소프트웨어 개발 환경에서, 패키지 관리 시스템은 개발자의 생산성과 코드 품질, 협업 효율성에 직결되는 중요한 요소입니다. 과거에는 npm과 Yarn Classic이 각자의 장단점을 가진 채 대표적인 패키지 매니저로 사용되었습니다. 특히 Yarn Classic은 npm보다 더 빠르고 일관된 설치 환경을 제공하여 많은 개발자들에게 사랑받았습니다. 그러나 대규모 프로젝트가 늘어나면서 Yarn Classic과 npm 모두 의존성 관리, 설치 속도, 확장성 측면에서 한계를 보이기 시작했습니다. 이러한 문제를 해결하기 위해 Yarn Berry가 탄생했습니다. Yarn Berry는 Yarn Classic의 다음... Read More
-
Headless Component TOP NEW
Headless Component React 개발을 시작할 때부터 유지보수의 중요성에 대해 계속 들어왔습니다. 특히 코드를 컴포넌트로 분리하여 재사용성을 높이는 것이 중요하다고 강조되었습니다. 이를 염두에 두고 자주 사용되는 요소들을 독립적인 컴포넌트로 나누며 프로젝트를 진행했습니다. 하지만 사용자의 요구사항은 계속 변했고, 같은 핵심 기능에 다른 외형이나 추가 기능이 필요한 경우가 많아졌습니다. 결과적으로 컴포넌트가 점점 커져 코드 가독성이 떨어지고 재사용성도 낮아지는 딜레마에 빠졌습니다. 이런 고민을 해결할 방법을 찾던 중에 Headless Component라는 개념을 알게 되었습니다. 이는 UI와 로직... Read More
-
ES Modules과 CommonJS TOP NEW
Module은 무엇인가요? 모듈은 코드의 집합입니다. 코드의 대부분은 변수를 변경하는 것이므로 이러한 변수를 어떻게 구성하느냐에 따라 코드 유지 관리에 큰 영향을 미칩니다. 모듈을 사용함으로써 각각 격리된 환경을 제공하고(충돌 방지), 재사용성과 유지 보수성을 높입니다. JS에는 대표적으로 ES Modules, CommonJS 모듈 시스템이 있습니다. CommonJS 란? CommonJS 모듈은 Node.js용 JavaScript 코드를 패키징하는 방식입니다. 모듈은 require와 module.exports를 사용하여 정의됩니다. ES Modules 이란? ECMAScript modules은 재사용을... Read More
-
렌더링 최적화 자체 제공 시스템, React Virtual DOM TOP NEW
0. 들어가며 - React와 렌더링 최적화 프론트엔드 개발을 하면서 최적화, 그 중에서도 렌더링 최적화는 빠질 수 없는 부분이죠. 우리는 개발을 하면서 개발자도구의 lighthouse, profiler 등을 이용해서 렌더링 변경사항을 확인하고 useMemo, useCallback 최적화에 용이한 리액트 훅을 신경써서 사용한다든가, api 응답을 caching하는 tanstack query를 이용한다든가, 하는 여러가지 방법을 이용해서 리액트 최적화를 실현하 기 위해 노력합니다. 이렇게 개발자가 직접 프로그래밍을 하면서 렌더링 최적화를 신경써야 하는 부분이 대다수이지만 리액트가 내부적으로 렌더링 최적화를 고려하여... Read More
-
RSC를 알아보자! TOP NEW
들어가는 말 Next 13 업데이트에 app directory가 되면서, app directory 내부 모든 컴포넌트는 기본적으로 서버 컴포넌트로 동작이 됩니다. 그러나 이를 클라이언트 컴포넌트로 설정하고자 한다면 파일 최상단에 use client를 선언하면 됩니다. 그런데 어떤 상황에 서버, 클라이언트 컴포넌트를 쓰면 좋을까요? 두 컴포넌트의 목적과 차이점 등을 살펴보고자 합니다. RSC가 뭐지요? RSC는 React Sever Component의 약자로 말 그래도 서버 컴포넌트입니다. 이는 서버에서 실행되는 컴포넌트 로 이해할 수 있습니다. 그러나 서버에서 어떻게 컴포넌가 렌더링되고 ... Read More
-
싱글톤 패턴 TOP NEW
싱글톤 패턴이란 싱글톤 패턴은 특정 클래스의 인스턴스를 1개만 생성되는 것을 보장하는 디자인 패턴입니다. 즉, 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고 최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴입니다. 싱글톤 패턴을 사용하면 메모리 사용을 최적화하고, 객체 생성 비용을 절감할 수 있습니다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberSe... Read More
-
reflection TOP NEW
JAVA의 Reflection을 알아보기 전 용어를 정리하겠습니다. 바인딩( Binding ) 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없는 구속(bind) 상태가 되는 것. 정적 바인딩( static binding ) 컴파일 시점에 값과 타입이 정해지는 것 동적 바인딩 ( dynamic binding ) 런타임 시점에 값과 타입이 정해지는 것 컴파일 ( Comfile ) 소스 코드를 다른 프로그램이나 기게( H/W )가 처리하기 용이한 형태로 변환하는 과정 이 과정중에 오류가 발생한다면 ‘ 컴파일 에러 ‘ 런타임( Runtime ) 컴퓨터 프로그... Read More
-
VO를 사용해야 하는 이유와 세 가지 특징 TOP NEW
안녕하세요, 저는 Kernel 360 백엔드 2기 크루 박소은이라고 합니다 ! 제가 오늘 이야기할 주제는 VO입니다. VO는 Value Object의 약자로, 값 객체입니다. 말 그대로 값 그 자체를 표현하는 객체입니다. VO = Value Object (값 객체) = 값 그 자체를 표현하는 객체 🖼️ 실생활 속 VO의 예시 실생활에서 값 그 자체를 표현하는 객체에는 어떤 것이 있을까요? 돈은 VO와 유사한 객체라고 볼 수 있습니다. 아래에 오만원권 세 장이 있습니다. 지폐에는 고유번호가 적혀 있습니다. 고유번호가 다르다고 해서 사람들이 다른 오만원이라고 생각할까요? 고유 번호가... Read More
-
좋은 객체지향 설계의 5원칙 TOP NEW
안녕하세요. kernel360 크루 양상원입니다. 객체지향 설계를 위해 필요한 원칙들에 대해 이야기하려고 합니다. SOLID이 필요한 이유 Java를 공부하면서 객체지향 특징과 원칙에 대해 한 번쯤 들어보셨을 것이라 생각합니다. 오늘은 좋은 객체지향 설계를 하기 위해 꼭 필요한 원칙인 SOLID에 대해서 이야기 해보도록 해보겠습니다. 클린 코드로 유명한 Robert C Martin이 2000년 논문 “디자인 원칙과 디자인 패턴”에서 개념을 소개하였습니다. 이후 Michael Feathers가 SOLID라는 약어를 사용하며 더욱 발전하게 되었습니다. 이 다섯 가지 원칙 덕분에 객체지향 프로그래밍의 세계에 ... Read More
-
브라우저 보안 정책과 CORS TOP NEW
브라우저 보안 정책 안녕하세요! 커널360 백엔드 2기 김민규 크루입니다. 이번 시간에는 브라우저 보안 정책에 대해 이야기해보겠습니다. 브라우저 보안 정책은 언제 처음 도입 되었을까요? 이는 1995년 Netscape 2.02. 버전에서 등장한 보안 정책, Same Origin Policy 에서 부터 시작됩니다. ◼️ Same Origin Policy 넷스케이프 네비게이터 출처 : https://en.wikipedia.org/wiki/Netscape_Navigator_2 1995년, 넷프케이프 네비게이터 브라우저에 새로운 스크립트 언어가 추가되었습니다. 동적으로 브라우저의 DOM에 접근하고, 내용... Read More
-
해시 알고리즘 쉽게 배우기 TOP NEW
해시 알고리즘 쉽게 배우기 🔥 해시 알고리즘을 사용한 해시 테이블 예 데이터를 빠르게 저장하고 검색하기 위한 알고리즘 ‘키(key)’를 사용하여 ‘데이터 값(value)’을 조회하는 방법. ‘키-값’을 ‘해시 테이블’이라는 데이터 구조에 저장하여 키에 매핑되는 인덱스 값으로 빠르게 찾는다 장점 - 해시 알고리즘을 사용하면 데이터를 찾는 검색 성능이 평균 O(1)로 좋아진다 - 충돌이 없다면!!! 키에 대한 데이터 있는지 확인 쉬움 단점 - 저장공간이 좀 더 필요 - 여러 키에 해당하는 주소가 동일한 경우 충돌을 해결하기 위한 다른 자료구조 필요 - 데이터 충돌하면 연결된 리스트들까지 모두 검색 → O(... Read More
-
NoSQL TOP NEW
NoSQL이란? 1. 비관계형 데이터 모델 유연한 스키마 : RDBMS 처럼 정해진 스키마를 바탕으로 데이터를 입출력 할 때 형태가 정해지지 않는다. 다양한 데이터 모델 : JSON, XML 등의 데이터 형식으로 저장할 수 있다. 2. 확장성 수평 확장 : 샤딩을 통한 분산 저장을 하는 NoSQL 특성 상 성능 확장을 위해 단순히 서버 컴퓨터의 수를 늘리는 방식이 가능하다. 샤딩 : 데이터를 조각내 분산 저장하는 데이터 처리 기법 3. 고가용성 및 장애 복구 자동 복제 : 데이터 복제 및 분산 저장을 통해 높은 가용성과 장애 복... Read More
-
인터페이스를 활용하여 조건분기 개선하기 TOP NEW
안녕하세요, Kernel360 크루 이강민 입니다. 오늘 포스팅에서는 인터페이스를 활용하여 조건분기를 개선하는 방법에 대해 이야기해보려고 합니다. 조건분기 조건분기는 아마도 우리가 코드를 작성하면서 가장 마주치는 친구들이죠. 가장 많이 사용하면서 가장 많이 실수하는 부분이기도 합니다. 너무 쉽지만 정말 잘 사용하고 있다라고 확신 할 수 있나요? 자주하는 실수 if문의 무한 중첩 가령 우리는 여러 요구사항을 맞이 할 때 복잡한 분기를 맞이하고는 합니다. 이러한 요구사항을 가장 쉽게 풀어 갈 수 있는 방법이 조건 분기인데요. 아마도 개발을 처음 시작하는 사람들은 아래와 같이 코드를 작성해본 경험이 있을 겁니다. ... Read More
-
Optional<T> TOP NEW
Optional란? 안녕하세요. Kernel 360 백엔드 2기 크루 송해덕입니다. 우리가 Spring JPA를 사용할 때 findByID를 하게 되면 반환값으로 항상 Optinal을 Return하게 됩니다. 그런데, 이런 Optional을 여러분은 올바르게 사용하고 계신가요? 오늘은 우리가 자주 사용하지만 올바르게 사용하지는 못하는 Optional<T>에 대해 알아보겠습니다. 어떤 기능을 알아보기 위해 가장 좋은 방법은 Documentation을 찾아보는 것입니다. Optional은 JDK 8에서 람다식, Stream과 함께 등장하였습니다. Oracle에서 제공하는 JDK DOCS를 보면 Op... Read More
-
정적 팩토리 메서드 패턴 TOP NEW
Static Factory Method Pattern 정적 팩토리 메서드 패턴이란? 지금까지 객체를 인스턴스화 할 때 직접적으로 생성자를 호출하고 생성했는데, 이와는 반대로 객체 생성 역할을 하는 메서드를 통해 간접적으로 객체 생성을 유도하는 것이 정적 팩토리 메서드 패턴이다. 조슈아 블로크의 이펙티브 자바에서 소개하는 아이템 중에서 첫 번째로 조언하는 것이 ‘생성자 대신 정적 팩토리 메서드를 고려하라’ 인데, 왜 이렇게 한단계 더 거쳐서 정적 팩토리 메서드를 통해 객체를 생성하라는 것인가에 대해 그 장점과 단점을 알아보자. 정적 팩토리 메서드의 장점 1. 생성 목적에 따라 네이밍이 가능하다 정적 팩토리 ... Read More
-
ArrayList vs LinkedList TOP NEW
배열(Array) 동일한 타입의 데이터를 연속적인 메모리 공간에 저장하는 자료구조 선언할 때 크기를 지정해야 하며, 한번 정해진 크기를 변경할 수 없다. 인덱스를 이용해 상수시간(O(1))에 배열의 임의의 원소에 접근할 수 있다. 타입[ ] 배열이름 = new 타입[ ] 형태로 선언한다. int[] arr = new int[5]; 리스트(List) 데이터를 순서대로 저장하는 자료 구조 선언 이후에도 크기를 동적으로 변경 가능 구현체로 ArrayList, LinkedList 등이 있다. List<Integer> list = new ArrayList<>();... Read More
-
Cache&Redis - 스프링부트 적용까지 TOP NEW
안녕하세요, 커널360 백엔드 2기 크루 김민주입니다. 🎀 오늘 제가 여러분과 함께 나누고자 하는 주제는 최근 E2E 프로젝트에서 많이 언급된 Cache와 Redis에 대한 것입니다. 특히, 스프링부트에 어떻게 적용할 수 있는지까지도 자세히 설명드릴 예정이에요. Cache의 개념과 필요성 여러분, 거대한 도서관을 한번 상상해보세요. 이 도서관에는 수십만 권의 책이 보관되어 있는데, 이 중에는 수백 년 된 고서부터 최신 신간까지 다양하게 포함되어 있습니다. 그런데 이렇게 많은 책들은 도대체 어떻게 보관되고 있을까요? 대부분의 사람들은 “그냥 책꽂이에 꽂혀 있겠지”라고 생각할 수 있지만, 사실 이 도서관은 굉장히 정... Read More
-
JavaScript 모듈 번들러의 이해 TOP NEW
부트업 과정 전까지 Webpack은 제게 그저 ‘CRA로 생성되는 무언가’로만 인식되고 있었습니다. 하지만 부트업 중 Webpack이 modern JavaScript 앱을 위한 정적 모듈 번들러라는 것을 알게 되었습니다. modern JavaScript 앱을 위한 정적 모듈 번들러 이 설명을 구성하는 용어들을 글에서 하나씩 살펴보고 이해하고자 합니다. Modern JavaScript JavaScript는 1995년 처음 등장한 이후 웹 개발의 핵심 도구로 자리 잡았습니다. 초기 JavaScript는 주로 간단한 스크립팅에 사용되었지만, 웹 애플리케이션의 복잡성이 증가하면서 언어 자체도 발전할 필요가 있었... Read More
-
CI/CD의 개념과 필요성 TOP NEW
1. 이런 글을 쓰게 된 배경 최근 진행한 헤커톤에서 팀원 교체를 경험하게 되었습니다. 서로 다른 코드 스타일로 인해 전체 소스코드가 개발이 진행되며 조금씩 어지러워진다는 느낌이 들기도 하였습니다. 이는 프로젝트의 규모가 커지며 더 심각하게 느껴질 수 있는 부분일 것입니다. 따라서 저는 위와같은 어려움을 겪으며 CI(지속적 통합)와 CD(지속적 배포)의 필요성을 느끼게 되었습니다. 팀원이 변경될 때마다 발생하는 문제를 최소화하고, 코드 품질을 유지하며, 개발 속도를 높일 수 있는 방법을 찾기 위해 CI/CD와 관련하여 글을 작성하게 되었습니다. 이 글에서는 CI/CD가 왜 중요한지, 어떻게 구현할 수 있는지... Read More
-
Suspense를 사용하여 Data Fetching 처리하기 TOP NEW
Suspense를 사용하여 Data Fetching 처리하기 이번 글에서는 Suspense를 활용해 data fetching을 처리해보겠습니다. 각각 useEffect를 사용한 방식과, Suspense를 활용한 방식의 컴포넌트를 구현하고 성능을 비교해보겠습니다. 구현할 컴포넌트의 조건은 아래와 같습니다. CatProfile, CatInfo 모두 로딩중일 때는 CatProfile이 로딩중임을 표시하기. CatProfile 컴포넌트가 로딩 중일 때는 CatProfile이 로딩중임을 표시하기. CatInfo가 로딩 중에는 CatInfo가 로딩 중임을 표시하기. 조건에 따라 구현된 화면은 아래와 같... Read More
-
CI/CD의 개념과 필요성 TOP NEW
1. 이런 글을 쓰게 된 배경 최근 진행한 헤커톤에서 팀원 교체를 경험하게 되었습니다. 서로 다른 코드 스타일로 인해 전체 소스코드가 개발이 진행되며 조금씩 어지러워진다는 느낌이 들기도 하였습니다. 이는 프로젝트의 규모가 커지며 더 심각하게 느껴질 수 있는 부분일 것입니다. 따라서 저는 위와같은 어려움을 겪으며 CI(지속적 통합)와 CD(지속적 배포)의 필요성을 느끼게 되었습니다. 팀원이 변경될 때마다 발생하는 문제를 최소화하고, 코드 품질을 유지하며, 개발 속도를 높일 수 있는 방법을 찾기 위해 CI/CD와 관련하여 글을 작성하게 되었습니다. 이 글에서는 CI/CD가 왜 중요한지, 어떻게 구현할 수 있는지... Read More
-
함수 컴포넌트에서의 Redux 성능 최적화 TOP NEW
들어가며 Redux는 리액트 애플리케이션의 강력한 상태 관리 방법을 제공하지만, 잘못 사용하면 성능 이슈가 발생할 수 있습니다. 이번 글에서는 Redux를 사용할 때 적용할 수 있는 성능 최적화 기법에 대해 알아보겠습니다. Redux와 함수 컴포넌트에서 발생하는 성능 이슈 다음과 같이 크게 2가지 문제를 생각해 볼 수 있습니다. 불필요한 리렌더링 : Redux 상태가 변경될 때마다, 연결된 컴포넌트들은 리렌더링됩니다. 하지만 모든 상태 변경이 해당 컴포넌트와 관련된 것은 아닐 수 있습니다. 이로 인해 불필요한 리렌더링이 발생하여 성능 저하를 일으킬 수 있습니다. 비효율적인 상태 선택과 계산 : ... Read More
-
Cautions when making API calls TOP NEW
안녕하세요, Kernel360 FE 1기 크루 양하연 입니다. 오늘 포스팅에서는 외부 API호출하실 때에 주의하실 점에 대해서 제가 이번에 참여한 프로젝트를 예시로 들어 설명드리려고 합니다. 개발자로서 일상적인 작업 중, 예상치 못한 오류에 직면하는 순간들이 종종 있습니다. 최근 저는 고유한 ID에 대해 요청하는 사람별로 다른 Enctpyed Value가 반환되는 상황을 마주했습니다. 암호화 관련 개념을 안다면 이 상황은 전혀 문제가 될 것 없는 아주 당연한 상황이라고 볼 수 있겠지만, 암호화에 대한 지식이 없는 저로서는 상당한 혼란을 겪었습니다. 오늘은 과연 이 상황이 무엇인지에 대한 관련 개념 소개과 더불어,... Read More
-
스프링 배치 튜토리얼 TOP NEW
안녕하세요, Kernel360 크루 김찬규 입니다. 오늘 포스팅에서는 WashFit 프로젝트에 배치성 작업을 추가하며 알게된 내용을 바탕으로 스프링 배치에 쉽게 입문 하실 수 있도록 도와드리려고 합니다. 배치 배치 처리는 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램(작업) 들의 실행입니다. 당연히 스프링 배치를 사용하지 않더라도 배치성 작업을 처리할 수 있겠죠. 그렇다면 언제 스프링 배치를 사용해야 할까요? 왜 스프링 배치를 사용해야 하나요? 스프링 배치 Spring Batch 는 기본 일괄 처리 작업을 자동화하며, 일반적으로 오프라인 환경에서 사용자 상호작용 없이 유사한 트랙잭션을 세트로 묶어 처... Read More
-
Asynch in Java TOP NEW
안녕하세요. Kernel360 1기 신종민입니다. 오늘 제가 준비한 내용은 자바에서의 비동기 프로그래밍에 대한 것입니다. 동기와 비동기 개념 우선 동기와 비동기의 기념에 대해서 설명드리겠습니다. 동기 프로그래밍은 작업이 순차적으로 진행하도록 하는 것입니다. 만약 이전의 작업이 완료되지 않으면 다음 라인은 실행이 되지 않습니다. 반면에 비동기 프로그래밍은 작업이 완료될 때까지 기다리지 않고 잠재적으로 오래 실행되는 작업을 시작하여 해당 작업이 실행되는 동안에도 다른 이벤트에 응답할 수 있게 하는 기술입니다. 작업이 완료되면 프로그램이 결과를 제공합니다. 프로그래밍이 다소 복잡하지만 자원을 효율적으로 사용할 수 있... Read More
-
가성비 있는 단위테스트 TOP NEW
안녕하세요, 김현지입니다. 이번 주제는 가성비 있는 단위 테스트입니다. 제가 이 주제를 선택한 이유는 컨트롤러 단위 테스트를 작성하면서 비용 대비 얻는 효과가 적은데?라는 고민으로부터 시작했습니다. 단위테스트 단위 테스트를 왜 작성하는걸까요? 제가 가장 좋아하는 열역학 제2법칙 엔트로피 증가의 법칙 때문입니다. 엔트로피 증가의 법칙은 모든 물질과 에너지는 무질서를 향해 간다는 법칙인데요, 소프트웨어 역시 이 법칙에서 크게 벗어나지 않습니다. 따라서, 무질서를 늦추기 위한 수단이 소프트웨어에서는 단위 테스트입니다. 우선, 단위 테스트의 목표가 무엇일까요? 단위 테스트의 목표는 소프트웨어 프로젝트의 지속 가능한 성... Read More
-
테스트코드에서의 유연한 Fixture 생성 (ObjectMother패턴 적용기) TOP NEW
개요 현재 진행중인 프로젝트(클라이밍 커뮤니티 Orury)의 테스트코드를 작성하며, 테스트코드에서의 Fixture(테스트용 객체) 생성 중복에 대한 고민과 그 해결책들에 대해 생각해봤습니다. 우선, 아래와 같은 배경(팀적 컨벤션) 하에 이뤄진 과정임을 말씀드립니다. Entity 코드에서는 @Setter의 사용을 금지함. Dto는 record로 구현함. 팩토리 패턴을 적용하여, Entity와 Dto에서 of() 메서드를 생성자로 활용함. (@Builder 활용X) 기존 코드 위와 같은 배경에서, 기존의 테스트코드에서 Fixture 생성메서드는 다음과 같이 구현돼있습니다. private... Read More
-
다이나믹 프로그래밍 TOP NEW
안녕하세요. 이번에 다이나믹 프로그래밍에 관하여 기술세미나를 드릴 김원상입니다. 다이나믹 프로그래밍은 코딩테스트를 처음 접하시는 분들에게는 진입장벽, 조금 익숙하신 분들에게는 알다가도 모를것 같은 알고리즙인데요. 제 나름대로 다이나믹 프로그래밍 문제를 접근하는 방법과 어떤 식으로 공부하면 좋을지에 대한 생각을 나눌 수 있을 것 같아 선택한 주제입니다. 커널360 코딩테스트에도 나왔고, 다른 기업 코딩테스트 후기를 봐도 조금씩 나오기 때문에 연습을 많이 해두시면 분명 원하는 회사를 가시는데 도움이 될 거라 생각합니다. 1. 리처드 E. 벨만 다이나믹 프로그래밍은 리처드 E. 벨만이라는 수학자가 처음 고안한 알고... Read More
-
APM(feat.Pinpoint) TOP NEW
안녕하세요. APM 그리고 핀포인트에 대해 발표하게 된 홍주광입니다. LGTM 여러분 LGTM 이라는 말을 들어보셨나요? 코드리뷰 때 들어보셨을 것 같은데요. 제가 소개드릴 LGTM 은 코드리뷰 때가 아닌 그라파나에서 밀고 있는 기술스택을 의미합니다! L : Limit(로그 수집 저장소) G : Grafana(시각화) T : Tempo(분산 추적 저장소, APM) M : Mimir(시계열 메트릭 저장소) LGTM을 미는 이유 그렇다면 그라파나에서는 왜 LGTM 을 밀고 있을까요? 보통 시스템 모니터링, 로깅, 애플리케이션 성능 모니터링을 구성하기 위해 대부분의 회사에서는 여... Read More
-
DNS 흐름 파악하기 TOP NEW
목차 도메인과 호스트네임 DNS란 DNS 동작 과정 DNS 레코드 타입 최종 정리 1. 도메인과 호스트네임 www.naver.com 이라는 URL이 있을 때 도메인은 어느부분을 말하는 것일까요? www를 제외한 naver.com이 실제 도메인입니다. 그럼 우리가 사용했었던 www는 무엇일까요? www는 호스트네임 입니다. www 말고도 여러가지가 도메인 앞에 .과 함께 붙게되는데 예를들자면 map.naver.com news.naver.com 이라면 news, map은 호스트 네임 입니다. 이제 실제로 DNS가 무엇이고 어떻게 동작하는지에 대해 네이버 웹사이트에 접속하... Read More
-
JVM TOP NEW
JVM 반갑습니다. 지난시간 RDBMS에 이어 이번에는 JVM을 주제로 기술세미나 발표를 한 정지용 입니다. [1. 개요] 우리가 자바를 공부하고, 스프링을 쓰고 있지만 기업의 니즈 때문에 라는 이유를 빼고, 왜 자바를 쓰는지 생각해보신적 있으신가요? 제가 생각하는 자바를 쓰는 이유는 객체지향이라는 개념적인 부분도 있겠지만 우리가 도커를 사용하듯 OS에 종속이 최소인 기술적 장점도 있기 때문이라 생각합니다. 이번 시간에는 JVM이란 무엇인지 일부 알아보는 시간을 가져보고자 합니다. [2. JVM란?] JVM은 이름 그대로 자바를 가상의 환경에서 작동시켜주는 소프트웨어입니다. WORA 원칙을... Read More
-
자바 제네릭(Generic) - 제네릭 메서드와 타입 범위 한정 TOP NEW
안녕하세요 커널360 1기 크루 우무룡입니다. 기술세미나 발표주제로 익숙하면서도 헷갈릴 수 있는 제네릭을 선정했습니다. 기본적인 개념에 대해 간단히 알아보고 개인적으로 헷갈렸던 제네릭 메서드와 타입 범위 한정에 대해 주로 알아보겠습니다! 제네릭이란 자바에서 제네릭은 타입 안정성을 위해 jdk 1.5부터 도입된 문법이다. 클래스 내부에서 사용할 데이터 타입을 클래스 내부에서 선언하는 것이 아닌 외부에서 사용자에 의해 지정하는 기법이다. ArrayList<String> list = new ArrayList<>(); 저 꺾쇠 괄호가 바로 제네릭이다. 괄호 안에는 타입명을 기재한다. 그러면 저... Read More
-
Fixture Monkey TOP NEW
안녕하세요. 저는 이번 Kernel360의 기술세미나에서 Fixture Monkey를 주제로 발표하게된 손현준입니다. Fixture Monkey는 2023년 10월 네이버 오픈소스로 1.0.0 버전으로 release 되었습니다. Fixture Monkey 네이버페이 Platform lab에서 만든 PBT(Property Based Testing) 도구로 실제 네이버 사내에서 활용중인 도구입니다. 1. Fixture Monkey 소개 Fixture Monkey는 제어 가능한 임의 테스트 개체를 쉽게 만들도록 설계된 Java 및 Kotlin 라이브러리입니다. 필요한 테스트 픽스처 생성을 쉽고 빠르게 도와... Read More
-
STOMP 웹소켓 프로그래밍 TOP NEW
안녕하세요. 저는 STOMP 웹소켓 프로그래밍이라는 주제로 발표한 문찬욱입니다. 저는 이번 프로젝트에서 채팅 기능을 구현하고 있는데요, 그 과정에서 사용한 기술에 대해 공유드리고자 이 주제를 선정했습니다. 이 글에서 웹소켓이 무엇인지, http와 웹소켓의 차이점이 무엇인지, 웹소켓 동작 방식은 어떤지, STOMP이 무엇인지 알려드리고자 합니다. 1. 웹소켓 웹소켓은 http 환경에서 클라이언트와 서버 사이에 하나의 TCP 커넥션을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜입니다. 여기서 전이중 통신은 전화기처럼 양방향으로 송신과 수신이 가능한 통신을 뜻합니다. 2. HTTP vs 웹소켓 ... Read More
-
주저하는 개발자들을 위해 - 코딩 테스트 TOP NEW
코딩 테스트? 코딩 테스트란 개발자의 기술적인 역량을 시험하기 위해 실시하는 알고리즘이나 구현을 요구하는 테스트다. 회사 입장에서는 지원자를 평가하는 최소한의 기준이고 지원자에게는 통곡의 벽 처럼 느껴지는 코딩 테스트 대체 왜 해야할까? 그리고 또 어떻게 준비해야만 할까..? 코딩 테스트 그래서 왜 해야하나? 무엇보다도, 많은 회사들이 코딩테스트를 1차적인 관문으로 두고 지원자를 거르고 있기 때문에 그런 회사들에 지원할 생각이 있다면 꾸준히 준비하는 게 좋다. 아래 4가지 이유를 통해서 조금 더 자세히 알아보자면.. 여러분들이 가고 싶어하는 많은 회사에는 정말 많은 지원자가 몰린다. 이들 개개... Read More
-
이번엔 Spring REST Docs를 써볼까? TOP NEW
안녕하세요, Lune 입니다. 이번엔 Spring REST Docs를 기술 세미나 주제로 가져와봤는데요. Spring REST Docs를 프로젝트에서 사용하게 된 이유부터 적용기까지 공유해보려고 합니다. 1. API 문서의 필요성 조금 뻔한 얘기로 시작해볼까요? 개발을 하면서 API 문서들이 필요한 이유는 무엇일까요? 제가 생각해봤을 때, 그리고 검색을 해봤을 때 아래와 같은 이유들이 있었습니다. API 사용법 이해 개발자 간의 효율적인 협업 빠른 문제 해결 및 버그 대응 개발 생산성 향상 개인적으로는 일단 2번이 제일 와닿습니다. 협업할 때 같은 API 문서를 보며 얘기하면 소통이 더 ... Read More
-
함수형 프로그래밍 TOP NEW
안녕하세요. 함수형 프로그래밍을 주제로 발표한 장호윤입니다. 보다 친숙한 객체지향 프로그래밍 외에 다른 프로그래밍 패러다임에 대해서 다뤄보고자 이 주제를 선정하게 되었습니다. 프로그래밍 패러다임 함수형 프로그래밍은 프로그래밍 패러다임 중 하나입니다. 프로그래밍 패러다임은 프로그래머가 어떤 관점으로 코드를 작성할지 결정하는 역할을 하는데, 최근의 프로그래밍 패러다임은 크게 아래와 같이 구분할 수 있습니다. 명령형 프로그래밍 절차지향 프로그래밍 객체지향 프로그래밍 선언형 프로그래밍 함수형 프로그래밍 명령형 프로그래밍은 무엇... Read More
-
Spring JPA와 Flyway TOP NEW
안녕하세요, 저는 이번에 Spring JPA와 Flyway를 주제로 기술 세미나를 진행했습니다. 프로젝트에서 협업을 하며 데이터베이스 버전을 관리해야할 때가 있는데요, 변경할 내용이 있을 때마다 직접 문서화를 해줄 경우 번거롭고, 실수할 수도 있습니다. 이런 문제를 해결하기 위해서 어떻게 협업을 할 수 있는지, 이 때 주의해야할 것들이 있는지 등 프로젝트를 겪으며 알게된 내용을 공유하고자 합니다. 더 나아가 SQL과 Spring JPA의 연관관계를 맺는 방법도 비교해보겠습니다 ! 1. Spring JPA란? 스프링 JPA(Java Persistence API)는 자바 ORM(Object-Relational M... Read More
-
생산성을 도와줄 프로그램들 TOP NEW
생산성 향상을 위한 도구들 생산성이란? 좋은 개발 환경 구축 : 효율적인 작업 환경 ex)IDE, 버전관리 도구, 디버깅 도구… 자동화 : 시간을 소모하는(많이)작업을 자동화 하여 시간 단축 코드 품질 관리 : 코드 리뷰, 정적 분석 도구 활용 학습과 성장 : 최신 개발 트렌드 지식 유지 및 기술 향상 작업 관리 : 우선 순위 설정과 같은 체계적으로 단계를 형성하여 관리 이중에서 시간을 아낄 수 있는 효율에 초점을 맞추어 글을 작성하도록 하겠습니다. 목표 목차 JPA Buddy IntelliJ Live Template Github Copilot Octotree ... Read More
-
배포있게 배포하기 -DB편- TOP NEW
다시 돌아온 Docker 세미나 시간입니다. 어쩌다보니 오픈세미나에 이어서 이번 주제도 Docker와 관련한 주제로 선택을 하게 되었는데요. (정말 파도 파도 공부해야 하는 부분이 계속 나오더라구요.) 이전 오픈 세미나에서는 Docker의 기본적인 내용을 설명을 했다면 오늘 설명드릴 내용은 DB replication을 Docker를 통해서 적용해 보고 이를 쉽게 적용할 수 있도록 나온 서비스인 AWS RDS를 통해서 이해하는 시간을 가져보려고 합니다. 그럼 시작해보겠습니다. 1. Docker-Compose는 무엇인가? 아마 Docker를 공부하다 보면 Docker-Compose에 대해서 이름은 들어보... Read More
-
일급 컬렉션이란? TOP NEW
안녕하세요, 지난번 자바의 가비지 컬렉션 발표에 이어서 또 다시 기술 세미나를 맡아 시작하게 되었습니다. 특별히 지난번 가비지 컬렉션 발표에 이어서 또 다른 컬렉션에 대해 발표를 해보면 어떨까? 하는 생각에 (농담입니다) 객체지향에서 크루분들이 어려워하는 개념 중 하나인 일급 컬렉션 에 대해 발표를 진행하기로 하였답니다. 1. 일급 컬렉션(first-class-collection)이란? 일급 컬렉션 에 대한 개념은 마틴 파울러 의 책 소트웍스 앤솔러지 에서 처음으로 제시되었습니다. 규칙 8: 일급 콜렉션 사용 이 규칙의 적용은 간단하다. 콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다... Read More
-
더 나은 테스트로 인도해줄 친구들 TOP NEW
개요 안녕하세요, 커널 360 2차 기술세미나의 포문(for문아님)을 열게된 조형준입니다. 저번 포스팅에선 클린코드에 관한 내용을 다뤘는데요, 이번 포스트는 더 좋은 테스트코드를 도와주는 프레임워크를 소개해드리겠습니다! 테스트코드, 이제 좀 짰어요! ControllerTest.. ServiceTest.. RepositoryTest.. 등등.. 여러 테스트코드를 작성했겠다. 이제 좀 테스트코드를 알 것 같아요! 과연 그럴까? 네.. 테스트 커버리지는 박살이 났습니다. 이대로 출시하게 된다면 뭐.. 결과는 뻔하겠죠 테스트도 일이다. 효율적으로 하자. 이러나저러나, 테스트코드도 어쨌든 공수입니다. 따... Read More
-
도커 찍먹하기 TOP NEW
안녕하세요, 김현지입니다. 이번에는 ‘도커 찍먹하기’라는 주제로 기술 세미나 발표를 하게 되었습니다. 도커를 선택한 이유는 저의 파이널 프로젝트를 배포할 때 도커를 사용할 것이기 때문입니다. 이에 따라 도커에 대한 이해와 익숙함을 기를 필요가 있다고 판단하였습니다. 이 포스팅은 ‘도커’에 대한 깊은 원리를 다루는 것이 아니라 소개 수준으로 이루어질 것이니, 편안하게 따라와 주시면 감사하겠습니다. 처음에는 도커가 무엇인지부터 시작해서, 개발과 배포 과정에 어떻게 변화를 가져오는지 살펴보겠습니다. 도커란 무엇일까요? 도커는 컨테이너를 생성하고 실행할 수 있는 생태계입니다. 생태계라는 표현을 강조한 이유는 도커와... Read More
-
Github Actions TOP NEW
목차 목표 CI / CD란? GithubActions란? workflow? 사용해야하는 이유? 장점 단점 정리 목표 CI / CD, Github Actions이 무엇이고, 어떻게 사용할 수 있는지, 그리고 어떤 장단점이 있는지를 알고 사용하는 것을 목표로 글을 작성합니다. 1. CI / CD란? CI/CD는 Continuous Integration과 Continuous Delivery 또는 Continuous Deployment의 약자로, 소프트웨어 개발에서 흔히 사용되는 방법론입니다. 1-1. Continuous Inte... Read More
-
세션 인증과 JWT를 이용한 토큰 인증 방식 TOP NEW
이번 포스팅에서는 세션과 JWT를 이용한 인증 방식에 대해서 알아보겠습니다. 세션과 JWT를 다루기 전에 먼저 알고 넘어가야하는 중요한 개념이 있는데요, 바로 인증과 인가입니다. 인증과 인가 인증 인증(Authentication)은 쉽게 말해서 로그인 이라고 할 수 있습니다. 클라이언트가 이 사이트에 가입된 회원임이 맞는지 아이디와 패스워드 등을 통해서 말 그대로 인증 받는 것이지요. 예를들어, Github에 이메일과 패스워드를 통해서 로그인을 했다고 가정해본다면 Github 서버는 사용자가 입력한 로그인 정보를 통해서 Github에 가입된 회원이 맞는지 검증하고 확인한 것입니다. 위와 같이 클라이언트가 이 사이... Read More
-
클린코드, 뭐부터 시작해볼까? TOP NEW
개요 안녕하세요, 커널360의 크루로 활동중인 조형준입니다. 이번 기술세미나의 주제는 ‘클린 코드’를 선정해봤습니다. 클린코드는 ‘읽기 쉬운 코드’, ‘협업하기 좋은 코드’ 등과 같은 특징을 가지고 있는데요. 본 포스팅에서 어떤것부터 시작하면 좋을 지 찬찬히 따져보도록 하겠습니다. 클린코드? 개발자 필독도서라고 한번쯤은 들어보셨을 그 책입니다. 책의 이름이기도 하지만, 결과적으로는 좋은코드, 읽기 좋은 코드 등의 의미와 일맥상통한다고 생각합니다. 클린코드에서 말하는 규칙은 여러개가 있는데, 몇가지만 톺아보자면 다음과 같습니다. 함수는 하나의 기능만 나쁜 주석 배제 좋은 함수 이름 철저한 네이밍 ... Read More
-
AWS를 통한 모니터링 TOP NEW
안녕하세요, 저는 이번에 AWS를 통한 모니터링을 주제로 기술 세미나를 진행했습니다. 여러 프로젝트를 통해서 AWS에 서비스를 배포한 경험이 있으신 분들이 계실텐데요, 실제 서비스를 배포한다면 단순히 배포에서 끝나는 것이 아니라 이 후 모니터링을 통해 장애나 서비스 중단 등의 문제가 발생하는지 확인해보아야 합니다. 이번 주제에서는 AWS가 제공하는 서비스를 통해, 모니터링을 어떻게 할 수 있는지에 대해 알아보겠습니다. 1. AWS Amazon Web Services 아마존(Amazon)에서 제공하는 클라우드 서비스로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제... Read More
-
RDBMS의 조회과정, 쿼리실행계획 중요성 TOP NEW
RDBMS의 조회과정, 쿼리실행계획 중요성 반갑습니다. RDBMS와 쿼리실행계획의 중요성을 주제로 기술세미나 발표를 한 정지용 입니다. [1. 개요] 요즘 자바와 ORM을 기반으로 개발을 하게되어 직접적으로 쿼리를 보는 일이 예전보다 현저히 줄어들었다고는 하나 아직도 데이터가 저장되는 저장소는 대부분 데이터베이스입니다. 결국 그 말은 즉슨 아무리 데이터베이스에 의존을 최소화 하더라도 어쩔 수 없이 데이터베이스에 대해 잘 알아야 한다는 이야기이기도 합니다. 이번 시간에는 RDBMS에서 다양한 기능을 많이 지원하지만 가장 많이 쓰이는 조회과정과 이와 연관되어있는 쿼리실행계획의 중요성을 알아보는 시간을 가져보고... Read More
-
CORS TOP NEW
CORS.. 웹개발을 하시다보면, 한번쯤은 마주해본 이슈라고 생각합니다. 처음 마주했을 때, 정말 어떤 개념인지 (Spring에서) 어떻게 해결해야 할지 헤맸던 경험이 있어, 제가 학습하고 이해한 CORS에 대해 설명해보고자 합니다. CORS란? CORS란 “Cross-Origin Resource Sharing”의 약자로, 웹 애플리케이션에서 다른 도메인 간에 데이터를 공유할 수 있도록 하는 보안 기술을 뜻합니다. 한번에 와닿지 않는 개념이기 때문에, 이어지는 개념들을 접하고 나서 다시 이해해보도록 합시다! SOP란? CORS의 반대되는 개념으로 SOP가 있습니다. “Same-Origin Polic... Read More
-
자바의 입력 Scanner, InputStream, BufferedReader TOP NEW
안녕하세요 커널360 1기 크루 우무룡입니다. //Scanner Scanner sc = new Scanner(System.in); //BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 백준에서 코딩테스트 문제를 푼 경험이 있으시다면 위와 같이 객체를 생성해서 입출력을 다뤄보셨을 것 입니다. 흔히 기본 문법을 배울때 배우는 Scanner를 사용하다가 자연스레 BufferedReader에 대해서도 알게됩니다. 두 클래스 모두 표준입력으로 부터 입력을 받아오는 역할은 같으나, 인스턴스화 하는 형태뿐만 아니... Read More
-
N+1 TOP NEW
안녕하세요. N+1 주제로 발표하게 된 홍주광입니다. 사례 먼저 보시겠습니다. 클라이언트에서 서버로 초당 5회의 요청을 보냈고 평균 30ms속도로 응답을 받았습니다. 조금 더 올려볼까요? 초당 1000회의 요청을 보내봤습니다. 어떻게 되었을까요? 초당 1000회의 요청을 보냈고 평균 4000ms속도의 응답을 받았습니다. 서버는 과부하가 되었습니다. 왜 이런 현상이 벌어졌을까요? 바로 이 사례에서는 N+1 문제 때문이였습니다. (물론 항상 위 현상이 N+1 문제로 일어나는 것은 아닙니다..) 그만큼 N+1 문제가 서버에 영향을 줄 수 있다는 뜻입니다. N+1 N+1 문제란 무엇일까요? ... Read More
-
데이터베이스 정규화 초급 TOP NEW
10분 기술세미나 주제: 데이터베이스 정규화 안녕하세요. 커널360 백엔드 1기 4셀 신종민입니다. 제가 이번에 준비한 발표 주제는 데이터베이스의 정규화에 관한 내용입니다. 부트업과 해커톤, 그리고 End to End 프로젝트를 거치면서 데이터베이스에 대해서 모르는 점이 많다는 점을 깨달았습니다. 파이널 프로젝트 외에도 앞으로도 백엔드 개발자로서 반드시 알아야 한다는 점을 깨닫고 데이터베이스에 대해 잘 알고싶어 발표 주제를 정하게 되었습니다. 1. 정규화의 정의 정규화란 무엇일까요? 위키피디아에서는 다음과 같이 나왔습니다. 관게형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스... Read More
-
실시간 웹 애플리케이션을 위한 API 전략 TOP NEW
안녕하세요, Lune 입니다. 저는 이번에 실시간 웹 애플리케이션을 위한 API 전략이라는 주제로 기술 세미나를 진행했습니다. 이 주제를 통해 REST, GraphQL, WebSocket API에 대해 주로 설명하고 각각을 비교해보려고 합니다. 1. API란 먼저 API(Application Programming Interface)가 무엇인지 간단히 알아볼까요? 우선 Application은 고유한 기능을 가진 모든 소프트웨어, Interface는 애플리케이션 간의 서비스 계약이라고 할 수 있습니다. 그리고 계약은 요청과 응답을 사용하여 애플리케이션이 서로 통신하는 방법이라고 할 수 있죠. 좀 더 쉬운 설명... Read More
-
Spring Security Authentication 구조 훑어보기 TOP NEW
안녕하세요. 스프링 시큐리티의 전체적인 인증 구조에 대해서 발표할 안소현입니다. 스프링 시큐리티, 무엇일까요? 스프링 시큐리티는 스프링 기반의 애플리케이션 보안을 담당하는 스프링 하위의 프레임워크입니다. 우리가 시큐리티 로직을 짤 때 흔히 인증과 인가으로 나눌 수 있죠. 인증(authentication)은 사용자의 신원을 입증하는 과정으로 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정이고 인가는 사이트의 특정 부분에 접근할 수 있는지에 대한 권한을 확인하는 작업이죠! 앞으로 발표할 내용은 spring docs에 나와있는 내용을 기반으로 작성되어 있습니다. 스프링 시큐리티 독스에는 정말 많은 내... Read More
-
스프링과 데이터 영속성(Persistence) TOP NEW
안녕하세요. 저는 이번 Kernel360의 기술세미나에서 자바진영에서의 데이터 영속성이라는 주제로 발표하게된 김원상입니다. 데이터 영속성은 Layered-Architecture의 가장 밑단의 Data Layer와 Domain Model사이를 잇는 Persistence계층에 대한 내용이라 보시면 되겠습니다. 1. 데이터 영속성이란? 데이터 영속성은 어플리케이션이 닫혀도 그로 인해 생성된 데이터가 비휘발성(non-volatile) 저장소에 기록되어 사라지지 않는 것을 의미합니다. 간단하게 말씀드리자면, 세션의 열고 닫음 사이에도 어플리케이션에서 생성된 데이터가 DB와 같은 영속적인 저장소에 입력되어 다음 세... Read More
-
시간 복잡도 TOP NEW
안녕하세요. 저는 이번 Kernel360의 기술세미나에서 시간 복잡도라는 주제로 발표하게 문찬욱입니다. 아마 다들 e2e하면서 DTO로 데이터를 이렇게도 바꿔보고 저렇게도 바꿔보셨을 것 같은데요. 저는 이 과정에서 시간 복잡도를 개선할 수 있다면 이 후, 서비스 성능면에서 좋은 영향을 주지 않을까라는 생각에 이 주제를 선정했습니다. 시간 복잡도에 대해 이야기 하기 전에 알고리즘에 대해 간단히 설명드리겠습니다. 1. 알고리즘 어떤 문제나 목적을 달성하기 위해 거쳐야 하는 여러 과정들을 의미합니다. 이 과정들은 다양하고, 상황에 따라 알고리즘은 모두 다릅니다. 따라서 상황에 맞게 성능이 좋은 알고리즘을... Read More
-
Https 누구냐 넌? TOP NEW
안녕하세요. 저는 이번 Kernel360의 기술세미나에서 Https를 주제로 발표하게된 손현준입니다. HTTPS는 인터넷을 통한 안전한 데이터 전송에 사용되는 보안 버전의 HTTP입니다. Https를 통해 데이터 개인 정보 보호 및 보안을 보호하기 위해 정보를 암호화합니다. 1. Https 란? 우리가 인터넷에서 자주 사용하는 인터넷 주소를 살펴보면, 프로토콜, 호스트(도메인), 포트번호, 경로, 쿼리값 등으로 이루어져 있습니다. 이 중 가장 앞부분에 자리하고 있는 http 부분을 hyper text Protocol 이라고 부릅니다. 하이퍼 텍스트 프로토콜이 무엇일까요? 프로토콜은 쉽게 말해, 인터넷 상에... Read More
-
Dispatcher Servlet TOP NEW
안녕하세요, 첫 주의 마지막 기술세미나를 맞게 된 손민우입니다. 자료를 준비하고 발표 연습을 하면서 우여곡절이 정말 많았습니다. (발표가 끝난 지금도 생각하면 떨리네요.) 주제를 선택하면서 가장 기본적인 부분에 대해 설명하고 싶었어요. 그래서 Controller에 대해 검색하다 알게 된 Dispatcher Servlet에 대해 발표해보면 어떨까하는 생각을 했던 것 같습니다. 그래서 이번 기술 세미나에서는 MVC의 흐름도에서부터 시작하여 Dispatcher Servlet, 마지막으로 Servlet에 대해 알아보고 결론적으로 개발자에게 어떤 도움을 주는지 알아볼까 합니다. 그럼, 시작해보겠습니다. 1. Spri... Read More
-
쉽게 이해하고픈 객체지향 TOP NEW
안녕하세요. 쉽게 이해하고 싶은 객체지향이라는 주제로 세미나를 진행한 크루 김찬규입니다. “쉽게 이해하고 싶은” 이라는 키워드를 보면 아시겠지만 제가 객체지향설계를 너무나도 잘 알아서 발표를 하는 것이 아니라 객체지향을 설명하고자 할 때 어려움을 겪는 제 모습을 발견한 것이 주제 선정의 계기가 되었습니다. 객체지향을 잘 이해하고픈 마음으로 공부하는 과정에서 얻은 내용들을 크루 여러분께 공유해 드리고자 합니다. 객체지향 패러다임 패러다임 먼저, 객체지향프로그래밍을 이해하려면 패러다임 이 무엇인지 알아야합니다. 패러다임이란 한 시대의 사회 전체가 공유하는 이론, 방법과 문제의식 등의 체계 를 의미하는데요, 이는... Read More
-
메시지 지향 미들웨어 TOP NEW
메시지 지향 미들웨어란 ? 메시지 지향 미들웨어(Message-Oriented Middleware) 는 시스템과 시스템간의 데이터 통신을 위한 소프트웨어, 즉 메시지라는 정보의 단위를 주고 받을 수 있게 하는 중간의 매개체 시스템입니다. 여기서 메시지 지향 미들웨어는 메시지 브로커와 같은 것들을 포함하는 매우 큰 단위로 메시지 브로커로 잘 알려진 Apache Kafka, RabbitMQ, ActiveMQ를 가지고 있습니다. 위에서 소개한 메시지 브로커들을 이해하려면 해당 브로커들에서 사용 중인 메시지 모델에 대한 이해가 필요합니다. 메시지 모델 메시지 모델에는 크게 두 가지로 나눌 수 있습니다. Mes... Read More
-
자바의 가비지 컬렉션 TOP NEW
안녕하세요, 이번에 Kernel 360 과정에 참여하게 되면서 기술 세미나를 맡아 준비하게 되었는데요. 거의 대부분의 팀들이 Java 와 Spring Framework 환경으로 프로젝트를 진행하고 있었습니다 (역시,, 자바민국) 그로 인해, 자바라는 언어를 처음 접하는 크루들도 굉장히 많았는데요. 그래서 이번 기술 세미나를 통해 자바의 장점을 설명하고 싶었어서 자바의 가비지 콜렉션(GC) 에 대해 발표를 하기로 하였습니다. 첫 블로그 글이라 기대가 되는데요, 가비지 콜렉션에 대해 함께 알아보도록 하겠습니다! 1. 가비지 콜렉션이란? #include <stdio.h> #include <std... Read More