분류 전체보기 23

[LeetCode] 1. Two Sum (Java 문제풀이)

문제링크: https://leetcode.com/problems/two-sum/ Problem 주어진 문제는 주어진 배열의 두 숫자를 골라 더했을 때 target이 되는 숫자들의 index를 구하는 문제이다. Solution 먼저 HashMap에 숫자를 key, index를 value로 집어넣는다. 이 때 중복값이 허용되므로 같은 숫자가 존재할 경우에 가장 마지막 숫자의 index가 value로 들어간다. 예) 숫자배열이 num: [1, 3, 5, 5, 8], target: 10이라고 한다면 생성된 HashMap은 {1:0, 3:1, 5:3, 8:4}이런 모양새가 된다. 이제 다시 숫자배열을 0번 index 부터 돌면서 target - num[index] 의 값이 생성한 HashMap의 key에 존재하는..

알고리즘 2024.03.15

[CSS]CSS의 display 속성값: inline, block, inline-block 비교

CSS의 display속성 CSS의 display 속성은 HTML 요소의 레이아웃을 지정하는데 중요한 역할을한다. element들이 화면에 어떻게 보여지고 element간에 어떻게 배치되는지를 결정한다. 그 중 display 속성값의 inline, block, inline-block에 대해 알아보자. inline display: inline 으로 설정된 element는 전후 줄바꿈 없이 한 줄에 다른 element와 함께 나란히 배치된다. 크기는 내부 콘텐츠에 맞게 자동으로 조정된다. width와 height 속성은 inline 요소에 적용되지 않는다. 예) , , 태그 block display: block 으로 설정된 element는 새로운 줄에 표시된다. 이 속성값을 가진 element는 한 줄을 차..

카테고리 없음 2023.06.05

[Spring] Spring Framework vs Spring Boot

스프링 프레임워크와 스프링 부트의 차이는 무엇일까? 스프링 부트 공식문서에 따르면 스프링 부트는 다음과 같다고 한다. Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration. 즉, 스프링 프레임워크는 기능이 많은만큼 환경설정이 복잡..

Spring 2023.01.03

서블릿(Servlet)과 서블릿컨테이너(Servlet Container)

서블릿과 서블릿 컨테이너에 대해 알아보자. 서블릿(Servlet)이란? 서블릿은 웹 프로그래밍을 위한 자바 기술이라고한다. 서블릿은 예전에는 정적 페이지로만 웹 서버에서 응답이 가능했다. 그렇다면 사용자의 요청값에 따라서 동적으로 변경되는 페이지를 어떻게 생성할 수 있을까? 예를들어 사용자에 따라 변화하는 내 정보 페이지를 어떻게 생성할 수 있을까? 바로 자바에서 동적인 웹페이지를 개발하기 위한 기술 중 하나가 서블릿이다. 즉, 서블릿은 웹 서버로부터 요청(Request)이 들어오면 동적으로 처리하고 다시 응답(Response)하는 자바 기술이라고 할 수 있다. 서블릿 컨테이너(Servlet Container)란? 서블릿을 보관하는 그릇(컨테이너)이다. 이 서블릿을 관리해주는 것이 서블릿 컨테이너고 대표..

Java 2022.12.30

[OAuth] OAuth란? OAuth 동작 과정

OAuth란? 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 웹 어플리케이션을 쉽게 찾아볼 수 있다. 클릭 한 번으로 간편하게 로그인할 수 있을 뿐만 아니라, 연동되는 외부 웹 어플리케션에서 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다. 이 때 사용되는 프로토콜이 OAuth이다. OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. (위키백과) OAuth 용어 정리 Resource Server: Client가 제어하고자 하는 자원을 보유하고 있는 서버 Slack, Google, Github 등이 속한다. Resour..

Computer Science 2022.12.13

[Network] HTTP 버전 별 차이 (HTTP 0.9/1.0/1.1/2.0/3.0)

HTTP란? 하이퍼텍스트 전송 프로토콜 (HyperText Transfer Protocol)로 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다. 버전은 0.9, 1.0, 1.1, 2.0, 3.0 버전이 있다. 핵심 HTTP 1.1 이 모든것의 기반이기 때문에 잘 알고 그 다음에 2.0 / 3.0을 알아두면 좋다. 추후 사용될 HTTP 3.0도 인지해두자. HTTP 0.9 1991년 등장 HTTP 초기 버전을 구분하기 위해 부르는 버전이다. HTTP 헤더도 존재하지 않으며, HTML 파일만 전송 가능했다. Request는 단일 라인으로 구성되며, HTTP method는 GET만 존재한다. ..

Network 2022.11.23

[Spring] DI 의존성 주입 방식과 생성자 주입을 사용해야 하는 이유

의존성 주입(DI)이란? DI란, 객체 간 의존 관계를 스프링 컨테이너가 Bean등록 정보를 바탕으로 자동으로 주입해주는 기능을 말한다. 일반적으로 스프링 프로젝트를 보면, 컨트롤러에서 서비스나 레포지토리 객체를 사용 시, 컨트롤러에서 서비스나 레포지토리 객체를 사용 시 new 키워드를 통해 컨트롤러에서 직접 객체를 생성하지 않고 의존성 주입을 통해 스프링 컨테이너에 생성된 객체를 받아 사용하고 있는 것을 볼 수 있다. 위와 같은 어노테이션이 붙은 클래스들은 스프링 실행 시 스캔을 통해 개발자가 정의한 의존성 정보를 자동으로 bean 설정 정보에 등록을 하게 되어 의존성 주입이 동작하게 합니다. 이를 통해 객체간 결합도를 낮추고, 코드의 양을 줄여주고, 테스트를 용이하게 하며, 개발 및 유지보수를 더 쉽..

Spring 2022.11.22

[Java] Comparable vs Comparator

Comparable, Comparator 모두 인터페이스로 객체의 값 비교나 정렬할 때 많이 사용한다. 인터페이스를 상속받아서 두 객체를 비교할 수 있도록 만들어주는 것이다. 왜 객체를 비교해야할까? primitive 타입의 경우 부등호로 쉽게 비교가 가능하다. 그러나 객체의 경우 부등호로 비교할 수 없다. 고로 두 인터페이스 중 한가지를 이용하여 객체를 바교하는 것이다. 둘 다 사용하고자 한다면 인터페이스 내 선언된 메서드를 반드시 구현해야한다. Comparable 인터페이스는 compareTo(T o) 메서드를 구현해야하고 Comparator 인터페이스는 compare(T o1, T o2) 메서드를 구현해야 한다. Comparable의 compareTo 메서드는 파라미터가 한개이고, Comparato..

Java 2022.11.21

[Spring] ArgumentResolver란?

ArgumentResolver가 필요한 상황 서비스를 운영하다보면 다양한 종류의 데이터를 받는다. 즉, 컨트롤러의 파라미터로 다양한 데이터가 온다는 것이다. 만약 사용자로부터 회원 id 요청이 들어왔지만 서버에서 필요한 정보는 회원이라면 어떻게 할까? 회원 id로 부터 회원정보를 조회해 회원 객체를 만들어주는 일련의 과정이 필요할 것이다. 이 때 사용되는것이 ArgumentResolver이다. Spring에서는 파라미터를 공통으로 처리할 수 있도록 구현된 인터페이스가 있는데, 그것을 바로 ArgumentResolver라고 부른다. 즉, 어떠한 요청이 컨트롤러에 들어왔을 때, 요청에 들어온 값으로부터 원하는 객체를 만들어내는 일을 ArgumentResolver이 간접적으로 해줄 수 있다. Spring Ar..

Spring 2022.11.18

[Spring] @Transactional의 트랜잭션 전파레벨

트랜잭션 전파레벨 @Transactional이란? 어노테이션 기반으로 설정하는 트랜잭션 구성 방식. 어노테이션 방식은 선언적 트랜잭션이라고도 불린다. 선언 시 트랜잭션 기능이 적용된 프록시 객체가 생성된다는 특징이 있다. @Transactional로 생성된 프록시 객체는 @Transactional이 적용된 메소드가 호출될 경우 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit/Rollback 동작을 수행한다. 즉, 트랜잭션 처리를 JDK Dynamic Proxy 객체에게 대신 위임하여 AOP로 동작하게 한다. 어노테이션으로 트랜잭션을 구성할 경우 다음과 같은 옵션을 줄 수 있다. propagation 트랜잭션 전파 옵션으로 동작 도중 다른 트랜..

Spring 2022.11.17