SQL이란? SQL(Structured Query Language)은 데이터베이스와 대화하기 위한 언어! 여기서 Query Language라는 것은 질의 언어로, 말 그대로 질의를 하기 위해 만들어진 언어입니다. > #### 그럼 여기서 Structured 는 무엇을
SQL에서도 사칙연산(+, -, \*, /)을 사용할 수 있습니다!그런데, 가만 보니 SELECT 문에 작성한 연산이 그대로 컬럼명으로 들어가있습니다. 이전에 배웠던 컬럼에 별명붙이기(Alias)를 이용해서 조금 더 깔끔하게 출력을 해볼 수 있을 것 같네요!그리고 wh
각 OS마다 기계어를 해석하는 방식이 다릅니다. 그렇기 때문에 다른 컴파일 언어(C, C++)들을 컴파일하고 서로 다른 OS에서 실행하려고 할 때, 동작하지 않는 경우가 많습니다.Java의 경우에는 소스 코드를 먼저 Java 컴파일러인 javac를 이용하여 바이트 코드
변수라는 것은 쉽게 말해서 공간입니다. 어떤 물체를 보관하기 위해서는 공간이 필요한데, 그 물체에 특성에 따라서 필요한 공간의 성질(모양, 크기 등)이 달라집니다. 그리고 그 공간들을 서로 구분하기 위해서는 공간에 이름도 붙여주어야 합니다. 또한 공간을 사용하기 위해서
클래스는 객체를 만들기 위한 설계도 입니다. 쉽게 말해서, 클래스는 프로그램에서 사용할 객체의 속성과 기능을 미리 만들어 놓은 틀이라고 할 수 있습니다.객체는 설계도인 클래스를 바탕으로 실제 메모리에 만들어진 실체 입니다.인스턴스는 객체와 거의 같은 말입니다. 단지 클
인터페이스란 쉽게 말하자면 프로그램 설계에서 지켜야 할 최소한의 규칙 입니다. 클래스들이 어떤 기능을 반드시 구현해야 하는지 명확하게 정해주는 설계도 역할을 합니다. 실제 구현은 신경 쓰지 않고, 어떤 기능이 무조건 있어야 하는지만 정해주는 역할을 합니다.개발하는 사람
예외는 프로그램 실행 중 예상치 못한 상황이 발생하는 것을 의미합니다.예외가 발생하게 되면 프로그램이 비정상적으로 종료될 수 있으므로 try-catch 구문을 통한 예외 처리가 필요합니다.0으로 나누는 행위는 따로 정의되지 않았으므로 ArithmeticException
Optional은 Java 버전 8부터 도입된 클래스이며, null을 안전하게 처리하기 위해 사용하는 객체입니다. 즉, 값이 null일 수 있는 상황에서 null을 직접적으로 다루지 않으면서 코드를 작성할 수 있도록 도와주는 도구입니다.null이라는 것은 값이 없음을
컬렉션(Collection)은 여러 데이터를 쉽고 효과적으로 저장하고 관리할 수 있도록 자바에서 표준화하여 제공하는 자료구조와 그 구현체들의 집합을 의미합니다. 쉽게 말해서 데이터를 저장하는 자료구조(List, Set, Map 등)와 데이터를 처리하는 알고리즘(sort
제네릭은 클래스, 인터페이스, 메서드 등에서 사용할 데이터 타입을 외부에서 지정하는 기법입니다. 어떤 타입이든 받을 수 있지만, 컴파일 시점에 타입을 명확하게 제한할 수 있습니다.타입 안정성: ArrayList<Integer>에 String을 추가하려고 할 때 오
람다를 공부하기에 앞서서 익명 클래스에 대해 알아보아야 합니다.익명 클래스는 말 그대로 이름이 없는 클래스를 의미합니다.보통 한 번만 사용할 일회성 클래스를 만들 때, 별도의 파일 없이 코드 안에서 바로 정의하여 사용할 수 있습니다.주로 인터페이스나 추상 클래스를 구현
쓰레드(Thread)는 프로세스 내에서 독립적으로 실행되는 작은 작업 단위입니다.\+) 운영체제에서 보는 쓰레드하나의 쓰레드가 모든 작업을 직렬적으로 처리합니다.자바 프로그램은 main() 메서드가 기본적으로 하나의 쓰레드로 실행이 됩니다.싱글 쓰레드의 경우 여러 작업
인터넷(Internet)은 Internet protocol suite(TCP/IP)를 기반으로 하여 전세계적으로 연결이 되어있는 컴퓨터 네트워크 통신망을 일컫는 말입니다.물리적으로 연결이 되어 있기도 하고, 무선 인프라(인공위성 등)을 통해서도 연결이 되어있으며 이러한
HTTP HTTP(HyperText Transfer Protocol)은 웹에서 텍스트, 이미지, HTML, JSON 등 다양한 데이터를 전송하는 데에 사용되는 표준 프로토콜입니다. 클라이언트와 서버 간의 요청, 응답 교환을 기반으로 작동하고 서버 간 통신이나 서버에서
소프트웨어 개발을 편하게 만들기 위한 개발 환경을 의미합니다. 쉽게 말하면 틀을 제공하는 것인데, 개발을 할 때에 이 틀에 맞추어 개발을 해야 합니다.프로젝트에 일관된 구조를 제공하여 코드의 일관성과 가독성에 기여합니다.기본적으로 필요한 기능과 도구를 제공해주기 때문에

동적인 웹 페이지를 생성하기 위해 사용되는 도구입니다. 템플릿을 기반으로 정적인 부분과 동적인 부분을 결합하여 HTML, XML 등의 문서를 생성하는 역할을 합니다.흔히 말하는 UI를 만들고, SSR(Server Side Rendering)에 사용이 됩니다.Java 코
@Slf4j는 Lombok에서 제공하는 어노테이션입니다. 클래스에 로그 객체(log)를 자동으로 생성해줍니다. Spring Boot에서는 주로 Logback을 로그 구현체로 사용합니다.System.out.println() 대신에 반드시 로깅 라이브러리를 사용해야 하며,
URL 끝에 ?key1=value1&key2=value2 형태로 데이터를 전송합니다.데이터 길이에 제한이 있고(보통 2048자 이하), 캐싱이 가능합니다. 그리고 URL에 데이터가 노출되기 때문에 보안 측면에서 취약합니다.HTTP Body에 key1=value1&key
@RequestParam은 HTTP 요청의 쿼리 파라미터 또는 폼 데이터 값을 컨트롤러 메서드의 파라미터로 바인딩할 때 사용하는 어노테이션입니다.내부적으로는 HttpServletRequest.getParameter("key")와 같은 역할을 더 간결하게 처리할 수 있게
정적 리소스라는 것은 HTML, CSS, JS, 이미지 등과 같이 서버에서 별도의 처리 없이 그대로 반환되는 파일을 의미합니다.Spring Boot에서는 아래 경로에 위치한 파일들을 정적 리소스로 인식하여 반환합니다./static/public/META-INF/resou
역할: 요청을 받고, 응답을 반환합니다.주요 책임: UI 처리, API 엔트포인트 제공, 사용자 입력 검증, 요청을 서비스 계층에 전달Spring Annotation: @Controller, @RestController역할: 비즈니스 로직 수행 및 트랜잭션 관리주요 책
JDBC(Java Database Connectivity)는 Java Application이 데이터베이스와 상호작용할 수 있도록 도와주는 자바 표준 인터페이스(API)입니다. 자바 코드에서 데이터베이스에 연결하고 SQL 쿼리를 실행, ResultSet을 처리하며 트랜잭
객체 지향 설계의 5가지 기본 원칙입니다.단일 책임 원칙 SRP(Single Responsibility Principle): 하나의 클래스는 하나의 책임만 가져야 합니다. 기존 코드가 위와 같다면, 단일 책임 원칙을 적용한 코드는 아래와 같습니다. 실제로는 상황에
Spring으로 구성된 Application에서 객체를 생성, 관리, 소멸하는 역할을 담당합니다. 여기서 말하는 객체는 Bean이라고 하며, Spring Container는 Application이 시작될 때 설정 파일이나 annotation 같은 것들을 읽어 Bean을
객체의 생성과 관리 권한을 개발자가 아닌, Spring Container가 담당하는 것입니다. 개발자가 객체를 직접 생성하고 관리했지만, Spring에서는 컨테이너가 객체의 생성, 주입, 소멸을 관리합니다.앞선 게시글에서도 이야기했듯이, 객체 간의 의존도, 결합도를 낮
Spring이 특정 패키지 내에서 @Component, @Service, @Repository, @Controller와 같은 annotation이 붙은 클래스를 자동으로 검색하고, 이를 Bean으로 등록하는 기능입니다.개발자가 직접 Bean을 등록하지 않고도 Sprin
Validation 특정 데이터(주로 요청 데이터)의 값이 유효한지 확인하는 단계를 의미합니다. Controller의 주요 역할에 해당하며, HTTP 요청이 정상인지 검증합니다. 왜 사용하는가? 잘못된 입력 값으로 인해 서버에 오류가 발생할 수도 있고... 서버의 문
특정 필드 검증은 빈 값, 길이, 크기, 형식과 같은 간단한 로직입니다. 이런 로직들을 모든 프로젝트에 적용할 수 있도록 표준화한 것이 BeanValidation 입니다.age에 -1을 넣고 요청을 보내게 되면, error 페이지로 이동하게 됩니다.하지만 이런 식으로
Cookie는 웹 서버가 사용자의 브라우저에 저장하는 작은 데이터 조각입니다. 주로 사용자의 로그인 상태, 세션 유지, 사용자 맞춤 설정, 트래킹 등의 상태 정보를 저장하며, HTTP의 stateless 한계를 보완합니다.HTTP는 Stateless와 Connectio
Cookie를 사용한 인증 및 인가 방식은 보안 문제가 많습니다. 중요한 정보를 클라이언트에 저장하면, 변조 또는 탈취 등 보안 문제가 발생합니다. 그렇기 때문에, 중요한 정보는 서버 측에 저장하고, 클라이언트와는 예측이 불가능한 임의의 값으로 연결하는 방식이 필요합니
Token은 Web Application이나 API에서 인증(Authentication)과 인가(Authorization)에 사용되는 디지털 문자열입니다. 사용자의 신원과 권한을 증명하고, 요청의 유효성을 검증하는 역할을 합니다. 인증된 사용자임을 확인하기 위한 고유한
공통 관심사라는 것은, 여러 위치에서 반복적으로 사용되는 부가 기능(인증, 로깅, 보안 등)을 의미합니다. 비즈니스 로직과 별개로 동작하고 코드 중복과 유지보수 문제를 일으킬 수 있습니다.대표적인 예시로는, 로그인이 되어있는 유저만 특정 API를 사용 가능한 것이 있습
JPA(Java Persistence API)는 자바 객체와 관계형 데이터베이스 간의 패러다임 불일치 문제를 해결하기 위해 만들어진 Java ORM(Object-Relational Mapping) 기술 표준입니다.인터페이스만 제공하며, 실제 구현체로는 Hibernate
JPA에서 엔티티 객체를 영구적으로 저장하고 관리하는 논리적인 메모리 공간입니다. 쉽게 말하자면, application과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스의 역할을 합니다.엔티티를 저장, 조회, 삭제 하는 등의 모든 작업은 먼저 영속성 컨텍스트를
클래스에 @Entity를 선언하면 JPA가 관리하는 엔티티로 인식하게 됩니다.필수 조건PK(@Id) 필드가 반드시 존재해야 함기본 생성자 필요final, enum, interface, inner class에는 사용이 불가능필드에 final 사용 불가능name 속성으로
Spring Boot에서는 JPA의 설정(EntityManagerFactory, TransactionManager 등)을 자동으로 구성합니다. DB 연결 정보는 application.properties(또는 application.yml)에서 간단히 지정하며 @Persi
코드와 파일의 변경 이력을 저장 및 관리하는 분산형 버전 관리 시스템입니다. 여러 사람이 동시에 작업할 때 수정 내역을 쉽게 추적할 수 있고 협업할 수 있게 도와줍니다.Git으로 관리한 코드를 인터넷에 저장 및 공유할 수 있는 웹 서비스입니다. 협업과 공개 프로젝트 관
전 세계적으로 사용되는 오픈소스 운영체제로, 서버, 개발환경, IoT 기기 등 다양한 곳에서 활용이 됩니다. 무료로 사용할 수 있고 사용자가 직접 커스터마이즈 할 수 있으며, 다양한 배포판이 존재합니다.Unix 철학과 구조를 계승한 OS입니다. Unix와 비슷한 기능과
제목은 50자 이내본문은 변경의 이유와 내용을 담아 72자 이내꼬리말(이슈 트래커, BREAKING CHANGE 등)으로 구성됩니다.\--soft: 커밋만 되돌립니다. 스테이징의 상태는 그대로 둡니다.\--mixed: 커밋과 스테이징 모두를 되돌리고 작업 디렉토리는 유
이슈는 단순한 버그 신고 뿐만이 아니라, 작업 계획, 토론, 진행 상황 추적 등 모든 개발과 관련된 논의를 기록하는 핵심 도구입니다.문제를 세분화해 프로젝트 구조를 만들고, 팀원 간 빠른 커뮤니케이션과 명확한 작업 분배를 가능하게 합니다. 이슈를 등록할 때에는 제목,
여러 명이 협업을 하거나, 프로젝트의 규모가 커질 때 코드의 안정성과 효율성을 높이기 위해 브랜치를 어떻게 나누고 merge를 하는 지에 대한 정책입니다.Dev: 새로운 기능 개발과 버그 수정 등 모든 작업의 기반 브랜치 입니다. 실험적인 코드가 포함될 수 있고 안정적
여러 명이 동시에 같은 파일의 같은 부분을 수정하면, Git은 어떤 변경을 적용해야 할 지 스스로 결정하지 못해 충돌이 발생하게 됩니다.PR 과정 뿐만 아니라, git pull 등으로 코드를 병합할 때에도 발생할 수 있습니다.충돌이 발생하면 Git은 CONFLICT 메
Docker는 어플리케이션을 쉽고 빠르게 만들고, 테스트하며, 배포할 수 있는 소프트웨어 플랫폼입니다. 컨테이너라는 개념으로 가볍고 이식성 높은 패키지로 어플리케이션을 실행시킬 수 있습니다.docker의 image는 실행에 필요한 모든 것들(코드, 라이브러리 등)을 포
개발자가 코드를 자주 통합하고 자동 빌드 및 테스트를 통해 코드 품질을 유지하며 문제를 조기에 발견하는 과정을 의미합니다.CI 결과물을 자동으로 스테이징 혹은 운영 환경에 배포하는 과정입니다. 승인 없이 바로 배포하는 것은 Continuous Deployment라고 부