[Java] Model : DTO / VO / DAO / Utility
·
Java
모델 (Model) 이란? - 객체지향 프로그래밍에서 클래스를 역할에 따라 부르는 이름 - [현실적]객체_Object = [프로그래밍적] 클래스_Class = [소프트웨어공학적] 모델_Model - 모델의 종류 1. 시작 클래스 2. DTO, VO Model : 데이터를 담는 (이동) 모델 3. DAO Model : 데이터 처리(DB)를 하는 모델 4. Utility Model : 도움(Utility)을 주는 모델 DTO / VO Model Data Transfer Object, Value Object - 데이터를 하나로 묶어야 하는 경우, 데이터를 하나로 수집하는 바구니 역할을 하는 모델 ex. 자동차 관련 14개의 변수를 14개의 매개변수로 메서드에 전달 → CarDTO 클래스 생성하여 매개변수 1개..
[Spring] HttpServletRequest, HttpServletResponse 객체
·
Spring
HttpServletRequest - HTTP 프로토콜의 요청 정보를 서블릿에 전달하기 위해 사용 - 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어들이는 메서드 포함 - Body의 Stream 읽는 메서드 포함 - 예제 코드 Enumeration enum = request.getParameterNames();// 파라미터 이름들 (iterator) Map paramMap = request.getParameterMap(); // 파라미터 값들 map 형태로 (key-value) String[] yearArr = request.getParameterValues("year"); // name이 "year"인 value 모두 String year = request.getParameter("yea..
[Web] HTTP 응답 상태코드와 요청 메서드(GET / POST)
·
Web
HTTP 응답 상태코드의 의미 상태코드 의미 1xx Informational (클라이언트-서버 간 정보 교환 목적, 잘 사용되지 않는다) 2xx Success 3xx Redirect (다른 URL 요청) 4xx Client Error (ex. 404 Not Found: 클라이언트가 잘못 요청한거임) 5xx Server Error (ex. 서버 처리 중 에러, 클라이언트 요청은 정상) GET - 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때 사용되는 메서드 • ex. 검색엔진에서 검색 단어 전송, URL 내 제품 ID - Query String을 통해 데이터를 전달 (소용량, Body 내용 없음) • URL에 데이터가 노출되기 때문에 보안에 취약하다 POST - 주로 새로운 리소스를 생성(C..
[Web] WAS란? 동적 / 정적 콘텐츠, Tomcat 요청 처리 과정
·
Web
0. 정적 - 동적 컨텐츠와 Web Server - WAS - 정적 컨텐츠 (Static Contents) • 요청 받은 파일 경로에 따라 항상 동일한 file contents를 반환 • ex) index.html, cat.jpg, style.css, hello.js • Web Server는 정적 컨텐츠를 반환한다 (대표적인 Web Server 종류 : Apache, Nginx 등) - 동적 컨텐츠 (Dynamic Contents) • 파라미터의 내용에 맞는 동적인 contents(프로그램의 결과물)를 반환 • WAS는 DB 조회, 로직 처리 등의 프로그램을 통해 처리한 동적 컨텐츠를 반환한다 (대표적인 WAS 종류 : Tomcat) 1. WAS 란? Web Application Server - DB 조..
[Java] Reflection API 알아보기
·
Java
런타임 단계에서 클래스 정보를 알아야 할 때 사용하기 좋은 도구인 Reflection API에 대해 알아보자! 0. 왜 필요할까? public static void main(String[] args) { Object obj = new Hello(); obj.main(); // Error } - 자바는 컴파일 시점에 타입을 결정 - Object 타입인 obj는 Hello 객체를 받아도 main 메서드를 실행할 수 없다 - 이런 경우에 Reflection API를 이용해, 런타임에 클래스의 이름만으로 클래스를 로딩하여 멤버를 사용할 수 있다! 1. Reflection API란? -구체적인 클래스 타입을 알지 못해도 클래스의 정보(메서드, 타입, 변수 등)에 접근할 수 있게 해주는 Java API • java..
[Java] JVM 구조와 메모리 영역
·
Java
1. JVM 구조 1.1. 클래스 로더 (Class Loader) - JVM 내로 클래스파일 (.class) 을 동적으로 로드 - 링크를 통해 메모리에 바이트코드를 배치 • 메모리에 로딩할 때, 모든 코드를 한번에 올리는 것이 아니라 어플리케이션에서 필요한 경우 동적으로 로딩 1.2. 실행 엔진 (Execution Engine) - 메모리에 로딩된 바이트 코드를 기계어(Binary Code)로 변경하여 명령어 단위로 실행 - 인터프리터(Interpreter)와 JIT(Just-In-Time) 컴파일러 두 가지 방식을 혼합하여 사용 • Interpreter : 명령어를 하나씩 실행 • JIT : 바이트 코드 전체를 컴파일하여 Native Code로 변경하여 캐싱해 두었다가 실행 - GC (Garbage C..
[BOJ / 백준] 2933번 미네랄 파이썬(Python) 문제 풀이
·
Baekjoon
문제 문제 링크 : https://www.acmicpc.net/problem/2933 2933번: 미네랄 창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄 www.acmicpc.net 풀이 💡 idea 1. 왼쪽 → 오른쪽 / 오른쪽 → 왼쪽 순서에 맞게 미네랄을 파괴한다 2. 파괴한 미네랄의 인접한 미네랄 덩어리(클러스터)를 찾아 떠있는 상태인지 확인한다 - 파괴한 미네랄과 인접 미네랄 : 파괴 이전에 같은 클러스터 3. 해당 클러스터가 떠있는 상태라면 떨어뜨리기! - 위 그림에서 보라색 미네랄이 파괴되었을 때, 오른쪽과 같이 인접해있는 파란색 미네랄 덩어리(클러스터)가..
[Java] 자바 실행 환경 JDK / JRE / JVM
·
Java
0. Java 코드 실행 과정 컴파일러, 명령어, 프로세서 필요 → JDK (JRE / JVM 포함) 설치 필요 1. JDK Java Development Kit - Java 프로그램을 개발하는 데 필요한 툴을 모아놓은 소프트웨어 패키지 - JRE, 컴파일러(javac 등), 디버거 등을 포함하는 프로그램 - JDK를 설치하면 PC에 설치되는 것 : JVM, API, TOOL(명령어) - OpenJDK, (유료) OracleJDK 2. JRE Java Runtime Environment - 자바 실행 환경 - JVM을 사용하기 위한 각종 자바 라이브러리를 담고 있다 3. JVM Java Virtual Machine - 자바 프로그램을 구동해주는 프로세서 - 자바 프로그램이 컴파일된 형태인 바이트 코드를 ..
[Java] 자바 플랫폼 종류 (Java SE / EE / ME)
·
Java
1. 자바 플랫폼 이란? : 자바 프로그램을 개발 및 관리하기 위한 환경 - 구성 : Java 언어, Java 패키지, JVM(Java Virtual Machine) 2. 자바 플랫폼의 종류 1. Java SE (Standard Edition) - 가장 대중적인 자바 플랫폼. 자바 프로그래밍 언어 핵심 기능들을 제공 - 흔히 자바 언어라고 하는 대부분 패키지 포함 ( java.lang.* , java.io.* , java.util.* 등) - 데스크톱 응용 소프트웨어 개발에 사용된다 2. Java EE (Enterprise Edition) - 자바 SE 기반으로 그 위에 탑재 - 대규모, 다계층, 신뢰성, 보안 네트워킹 애플리케이션 개발 및 실행을 위한 API 및 환경 제공 - 웹 기반 응용 소프트웨어 ..
[프로그래머스] H-Index Python 풀이
·
Programmers
문제 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE def solution(citations): h_idx = 0 citations.sort(reverse=True) for i in range(len(citations)): if citations[i] > h_idx: h_idx = i + 1 else: break return h_idx 풀이 💡 idea 1. citations를 역순 정렬 2. 가장 인용 횟수가 많은 논..