전체 글 54

[Servlet] 서블릿 및 JSP 요약 정리

Servlet 개념 웹서버 : 정적인 웹 컨텐츠를 처리하는 서버 동적 웹 컨텐츠를 처리하기 위해 사용하는 방법 : CGI CGI 가 Java 에서 사용하기 불편하고 CGI의 특성(프로세스를 만들었다 죽임) 때문에 Servlet 사용 Servlet은 spec(API) 이고 servlet을 생애주기에 맞춰 실행시켜주는 것이 Servlet Container이다. Servlet Container = Tomcat = Web Application Server Proxy Servlet 구현 Servlet 생애주기 : init -> service -> destroy service() 메서드는 굳이 override 할 필요 없음 : doGET(), doPost() 로 사용 doGET() ServletContext Ser..

개발/JAVA 2022.10.31

[Spring] 스프링 코어 정리 2 - 어노테이션

스프링 DI 방법 중 XML Annotation JAVA @Required 반드시 의존성이 주입되어야함을 강제 하는 어노테이션 @Autowired 주입 방법 required 속성 : 해당하는 객체가 스프링 컨테이너에 없으면 에러 타입이 같은 스프링 빈이 2개인 경우 : primary 속성 사용 가능 @Qualifier 스프링 빈의 이름을 지정해서 의존성 주입 @Value 외부속성을 주입하기 위해 사용 : 프로퍼티스 파일 내용 사용 환경별로 문자열이 달라질 수 도 있는 경우가 있으니 자주 사용 Annotation의 장점 XML 보다 간결한 코드로 설정 가능 Java 코드와 동일하게 구성 가능 단점 스프링 프레임워크에 의존성이 생겨버린다 Spring JavaConfig 클래스 사용 @Configuration..

개발/Spring 2022.10.31

[Spring] 스프링 코어 정리 1

스프링 프레임 워크란? - 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 - 프레임워크에 종속적이지 않음 (non-intrusive) - 원하는 기능만 끼워넣어서 사용가능 (modular) - 비기능적 요구사항 개발시, 필요한 인프라 제공 - POJO를 통한 개발 - 특징 - 경량 컨테이너로 Spring Bean을 직접 관리 - Spring Bean : 스프링 프레임워크가 원하는 대로 짠 자바 객체 - Spring 객체 라이프 사이클 관리 - Container : Spring bean 객체의 생성,보관,제거에 관한 모든 일을 처리 - POJO 기반 프레임워크 - 특정 인터페이스 구현 및 상속을 받을 필요 없음 - 제어 역전(IoC : Inversion of Control)..

개발/Spring 2022.10.12

[자바 성능 튜닝 이야기] 읽고난 후

자바 성능 튜닝 이야기 (이상민 저) 를 읽고 난 후의 감상평 및 정리를 해보고자 합니다. 어중간한 지식으로 프로그래밍을 하며 List를 선언해도 자동 완성으로 불러지는 아무거나를 사용하고 for 와 if로 하면 프로그램은 만들 수 있다 라는 말도안되는 자만에 빠져 초짜 중의 초짜 포지션을 못 벗어나고 있습니다. 그래서 이런 모습에서 벗어나보고자 똑똑한 선배님들이 본인의 경험을 아주 이쁘게 기록해두신 기술 도서를 읽어보자 라고 생각을 하고 책을 빌릴 겸 찾다가 책 제목과 목차에 이끌려 해당 책을 읽게 되었습니다. 아래는 책을 읽으며 정리할 만한 내용을 정리해두었습니다. GC와 JVM 내부 동작은 저와 같은 시작하는 사람에게는 어려운 내용이라 좌절하기 전에 덮었습니다. 😂 다음에 더 읽어보도록 하겠습니다!..

[JAVA] 직접 구현해보는 ArrayQueue 와 LinkedQueue

Queue는 First in First Out의 규칙을 가진 자료구조로서 간단한 예로 식당 예약 줄(먼저 들어온사람이 먼저 먹어야함!)이 있다. 자바의 Collection에 아주 잘 구현이 되어있지만 Queue의 내부 동작을 이해할 겸 Array 및 Node로 직접 구현해보았다. public interface Queue { public boolean isEmpty(); public void add(E element); public E element(); public E remove(); public int size(); } Queue를 구현 하기 전에 필수로 구현해야할 메소드를 interface로 정해놓았다. Array를 통해 구현한 Queue public class ArrayQueue implement..

개발/JAVA 2022.09.13

[JAVA] 배열 - Binary search (이분 탐색)

배열을 다시 공부하며 라이브러리의 메소드를 사용하지 않고 binary search를 직접 구현 해보고자 한다. 순차적 순회(for문으로 인덱스 0부터 if로 찾아보는 것)는 최악의 경우 N의 시간 복잡도를 가진다 그에 반해 binary search는 인덱스를 반씩 나눠가면서 찾고자 하는 수를 찾기 때문에 logN의 시간 복잡도를 가진다. (못찾으면 인덱스를 반으로 숭당 잘라서 그부분만 다시 순회해서 if로 찾으면 된다) 낮은 인덱스 : 0 높은 인덱스 : 찾아야하는 배열의 길이 중간 인덱스 (핵심!!) : (낮은 인덱스 + 높은 인덱스) / 2 이렇게 구한 중간 인덱스를 통해 찾고자하는 수를 찾으면 순회끝! 아래 코드를 보면 더 명확하게 알 수 있다. public static Integer binarys..

개발/JAVA 2022.09.03

[Spring] 스프링 컨테이너의 빈 조회 방법

스프링 컨테이너에 등록된 빈들을 조회하게 될 경우 사용하는 방법을 기록하고자 한다. 1. 모든 빈 조회 AnnotationConfigApplicationContext의 인스턴스인 ac로 부터 모든 스프링의 정보를 받기 위해서는 ac.getBeanDefinitionNames()를 실행하면 빈 이름을 모두 받아와서 ac.getBean(빈 이름) 을 통하면 빈을 조회 할 수 있다. public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBea..

개발/Spring 2022.08.25

[Spring] 스프링을 사용하는 이유?

Spring이란 JAVA를 좀 더 편하게 사용할 수 있게 해주는 프레임워크로 대규모의 회사에서 많이 사용한다. 여기서 "JAVA를 좀 더 편하게" 라는 단어의 의미를 김영한님의 "스프링 핵심 원리 - 기본편" 을 들으며 이해할 수 있게 되었다. 내가 프로그래밍을 하다 보면 하나의 class 혹은 객체에 정~말 다양한 책임과 기능을 모두 넣어 사용했었다. (혼자 기획하고 개발하다보니..) 그 이후에 객체 지향 설계 원칙에 대해 알게 되었고 그 설계 원칙을 단 하나도 지키지 않고 프로그래밍을 했다는 것 또한 알게 되었다. 내가 느낀바로는 Spring은 객체 지향적인 설계를 할 수 있도록 도와주는 아주 좋은 툴이라는 생각이 들었다. Spring에서 주요하게 사용 되는 단어로 IoC , DI 라는 단어가 나온다..

개발/Spring 2022.08.25

퇴사 이후 백엔드 개발 공부해보기

여러가지 이유로 인해 스타트업을 퇴사하고 이전부터 관심이 있었던 백엔드 개발을 배워보고자 합니다. 여러 방면으로 수소문 하던 도중 조선대학교에서 주최하는 NHN 아카데미 백엔드 개발자 과정이 있다는 것을 듣고 신청하고 면접 & 코딩 테스트까지 완료하여 합격하였습니다! JAVA는 캡스톤 프로젝트때 잠깐 건드려본 수준이고 Spring은 한 번도 다뤄본적이 없어 걱정이 되지만 살면서 처음으로 "내가 하는 공부"를 할 수 도 있겠구나 라는 생각이 들어 열심히 해보고자 합니다. 백엔드 개발이 워낙에 범위도 넓고 공부해야하는 분량도 많기 때문에 욕심부리지 않고 차근차근 공부해보고자 합니다.

일상 이야기 2022.08.24

[OS] 면접 질문 대비

운영체제란? 시스템의 자원과 동작을 관리하는 소프트웨어 프로세스, 저장장치, 네트워킹, 사용자, 하드웨어를 관리 메모리 구조 Code : 실행할 프로그램의 코드 Data : 전역 변수, 정적 변수 할당 Stack : 지역 변수, 매개 변수 (컴파일 타임에 크기가 결정됨) Heap : 사용자의 데이터 동적 할당 (런타임에 크기가 결정됨) 프로세스, 스레드 프로세스 : 실행중인 프로그램 (= 여러개의 스레드로 구성된 실행체) 독립된 영역이므로 메모리와 CPU를 프로세스 마다 할당 받음 스레드 : 프로세스 안의 실행 단위 프로세스 안에서 메모리와 CPU를 공유해서 사용한다 CPU 스케쥴러 ready queue에 있는 프로세스에 대해 CPU 할당 받는 방법 비선점 스케쥴링 (순서를 뺏지 않음) FCFS(Fisr..