전체 글 108

[Spring] 컴포넌트 스캔

스프링 빈을 등록할 때는 @Bean 어노테이션이나 XML의 태그를 통해 설정 정보에 직접 등록할 스프링 빈을 명시해주는 방법이 있는데요. 등록해야 할 빈이 많을 때는 일일이 등록하기에는 한계가 있고 누락문제도 발생할 수 있죠,, 그래서! 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공하고 있습니다. 또 의존관계도 자동으로 주입하는 @Autowired 기능도 제공합니다. @ComponentScan @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class), includeFilters = @Filt..

[Python][프로그래머스] - 더맵게

Heap 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료구조입니다. 부모노드와 자식 노드 사이에 대소 관계가 성립하며(자식 노드간에는 대소관계 없음) 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 힙을 최대 힙, 부모 노드의 키 값이 자식 노드의 키 값보다 작은 힙을 '최소 힙'이라고 합니다. 위 이미지는 최대 힙을 나타냅니다. 파이썬 heapq 모듈 인덱스 k번째 노드는 그 자식 노드 2K+1과 2K+2 보다 항상 작은 최소 힙의 형태로 정렬되게 합니다. heapq.heappush(list, item) : item을 list에 추가 heapq.heappop(list) : list에서 가장 작은 원소를 pop, 리..

[Spring] 싱글톤 컨테이너

이 글은 김영한님의 스프링 핵심원리 기본편 강의를 보고 공부용도로 정리한 내용입니다.^&^ 스프링은 객체를 싱글톤으로 관리한다 스프링 컨테이너는 기본적으로 객체 인스턴스를 싱글톤(1개만 생성)으로 관리합니다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글론 레지스트리라 합니다. 스프링 컨테이너의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있습니다. 스프링 빈으로 등록할 객체들을 @Bean 어노테이션을 이용하여 다음과 같이 명시할 수 있습니다. AppConfig.java @Configuration public class AppConfig { @Bean public MemberService memberService(){ System.out.println("cal..

[Network] Get vs Post

사용자가 서버에 요청을 보내는 방법인 HTTP Method에는 GET방식과 POST 방식이 있습니다. GET과 POST? 처음 들었을 땐 역시나 이게 뭐선소린고?싶었는데,,. 웹 개발자라면 당연히 알아야 하는 사항이라 포스팅해 봅니다. GET 방식 특정 정보를 가져와서 조회하기 위해서 사용되는 방식입니다. 즉, 데이터를 요청할때만 사용됩니다. 특징 요청 URL에 key와 value 쌍으로 변수와 값을 포함시켜 요청한다. 데이터를 헤더에 포함하여 전송한다. URL에 데이터가 노출되어 보안에 취약할 수 있다. 캐싱이 가능하다. 브라우저 히스토리에 남는다. GET방식으로 요청할 때는 요청 URL에 파라미터를 포함하여 보냅니다. 요청 URL은 무한정 길 수 없으므로 요청하는 데이터 양에 한계가 있습니다. 길이 ..

Network 2021.06.03

[Java] 컴파일러 vs 인터프리터 vs JIT compiler

자바를 공부하다보면 JIT compiler 에 대해 들어보셨을거에요. 그냥 컴파일은 뭐고 인터프리터는 뭘까요? 이것들이 무엇인지! 그리고 JIT 와는 어떻게 다른지 알아보겠습니다. 개발자가 작성하는 코드는 고레벨 언어라고 합니다. 컴퓨터는 이해하지 못하고 사람은 쉽게 이해할 수 있는 언어이죠. 이를 컴퓨터가 이해하기 위해서는 저레벨 언어인 기계어로 변환이 되어야 합니다. 이를 위한 방법에는 대표적으로 두 가지가 있는데 하나는 컴파일 방식, 다른 하나는 인터프리터 방식입니다. 컴파일 방식 먼저 컴파일이란 특정 프로그래밍 언어로 된 원래 소스 파일(원시코드)을 다른 프로그래밍 언어(목적코드)로 옮기는 언어 번역 프로그램입니다. 원시코드에서 목적코드로 옮기는 과정을 컴파일 한다고 말합니다. 작성된 소스코드를 ..

Java 2021.05.31

프레임워크 vs 라이브러리

Framework 프레임워크는 뼈대나 기반구조를 뜻합니다. 제어의 역전 개념이 적용된 대표적인 기술입니다. 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있습니다 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법중 하나라고 할 수 있습니다. 프로그래밍을 진행할 때 기본 구조를 제공해주기 때문에 프레임워크를 사용하는 프로그래머는 이 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면됩니다. 프레임워크는 완성된 제품이 아닌 완성된 제품을 만들기 위해서 개발자를 도와주는 또는 기반이 되는 역할을 합니다. 프레임워크는 뼈대나 기반구조를 뜻하는데, Application 개발 시 필수적인 코드, 알고리즘, 데이터베이스 연동..

Spring 2021.05.29

RDB vs NoSQL

RDBMS(Relational Database Management System) 관계형 데이터베이스를 생성하고 수정, 삭제 관리할 수 있는 소프트웨어 RDB 관계형 데이터 모델에 기초를 둔 데이터베이스 외래 키를 사용하여 테이블들 간의 관계를 나타내고 외래키를 이용하여 join을 할 수 있습니다. 관계형 데이터 모델 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현합니다. NoSQL(Not Only SQL) RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하고 있습니다. 테이블 간 관계를 정의하지 않습니다. 데이터 테이블은 단지 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 join이 불가능합니다. NoSQL의 등장..

SQL 2021.05.25

[Java] JVM 구조와 원리

JVM은 Java Virtual MAchine의 약자 입니다. OS와 자바 프로그램 사이에서 프로그램이 실행되는데 필수적인 환경을 제공해 줍니다. JVM은 크게 Garbage collector, Execution Engine, Class Loader, Runtime Data Area 4개의 영역으로 구성되어 있습니다. 또 Runtime Data는 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 구성되어 있습니다. JVM의 대표적 기능은 다음과 같습니다. 1. 운영체제에 상관없이 어디서든 자바 코드가 실행될 수 있게 한다. 2. GC(Garbage Collectoin) 기능을 제공한다. JVM 구조 Java Compiler Ja..

Java 2021.05.23

[Java] Static 변수, static 메소드

static(정적)은 '고정된'이라는 의미를 가지고 있습니다. 변수나 메소드 앞에 static 키워드를 붙여서 static 변수나 static 메소드를 만들 수 있습니다. 이 둘을 정적 멤버 또는 클래스 멤버라고도 합니다. 정적 멤버는 객체에 속한 것이 아니고 클래스에 속합니다. 따라서 객체 간에 정적 멤버를 공유할 수 있습니다. 메모리 사용을 최대한 늦추기 위해 클래스가 처음으로 사용될 때 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재합니다. 처음으로 사용될 때라는 것은 다음 세 가지 중 하나입니다. 클래스의 정적 속성(정적 변수, static{} 블록)을 사용할 때 클래스의 정적 메서드를 사용할 때 클래스의 인스턴스를 최초로 만들 때 이 때, 클래스별로 정적 멤버가 관리됩니다. 따라서 클..

Java 2021.05.23

[Java] String, StringBuffer, StringBuilder

자바에는 문자열을 저장하고 관리하는 클래스 중에 String, StringBuffer, StringBuilder가 있습니다. 이 클래스들의 차이점을 알아보겠습니다. String (immutable) vs StringBuffer (mutable), StringBuilder (mutable) String 객체는 한 번 생성되면 그 인스턴스의 메모리 공간은 절대 변하지 않아요(immutable) 반대로 StringBuffer와 StringBuilder는 가변성을 가집니다. String str = "I love" str += "you" str 변수가 가르키는 "I love" 문자열에 "you" 문자열이 더해진 것이라고 생각 할 수 있지만 str 변수는 "I love you"라는 새로운 메모리 영역을 가리키게 변..

Java 2021.04.22