전체 글

추운 겨울이 다가와 힘겨울지도 몰라 봄바람이 불어오면 이젠 나의 꿈을 찾아 날아
이전에 JVM의 구조와 특징에 대한 글을 게시한 적이 있다. (https://skroy0513.tistory.com/22)그중 실행 엔진에 대해서 좀 더 자세히 알아보고자 공부해 보았다.실행 엔진 (Execution Engine) 이란JVM은 Java 컴파일러가 컴파일한 바이트 코드를 Class Loader를 이용해 메모리(Runtime Data Area)에 실행 가능한 상태로 적재한다.실행엔진은 메모리에 할당된 바이트 코드를 실행하는 역할을 담당한다. 기존의 .java 파일인 소스코드는 기계가 읽을 수 없는 언어이기 때문에 컴파일러가 .class인 바이트 코드로 변환을 해 준 뒤, 실행 엔진은 해당 바이트 코드를 한 줄씩 읽어 실행하는 인터프리터, JIT 컴파일러, 가비지 컬렉터 등의 동작으로 바이트 ..
자바 빈(Java Bean)이란?데이터를 표현하기 위한 목적을 지니고 있으며, 특정한 정보 (id, password, name, job..) 등을 가지고 있는 클래스를 표현하는 하나의 규칙이고, 이러한 규칙을 지닌 클래스를 Java Bean이라고 한다.  자바로 작성된 컴포넌트들, 즉, 클래스를 가리키는 뜻으로 사용된다.DTO, VO 등의 형태가 Java Bean이라고 생각하면 쉽다.Java Bean의 규약반드시 클래스는 패키지화되어야 함멤버 변수는 property(프로퍼티)라고 함멤버 변수는 private로 지정하고, getter / setter를 통해서만 외부 접근이 가능해야 한다.getter / setter는 public으로 지정해야 한다.인자가 없는 생성자가 존재해야 한다. (NoArgsConst..
트랜잭션트랜잭션(Transaction)이란 논리적인 작업 단위로 여러 개의 작업을 하나로 묶은 실행 유닛이다.각 트랜잭션은 하나의 특정 작업으로 시작해서 묶여 있는 모든 작업들이 모두 완료되어야 정상적으로 종료한다. (Commit 실행)만약, 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 해당 트랜잭션에 속한 모든 작업은 실패한 것으로 판단한다.(Rollback으로 모든 작업 취소) 트랜잭션은 성공 또는 실패 두 가지 결과만 존재하며 미완료된 작업 없이 모든 작업을 성공해야 한다.이러한 트랜잭션은 ACID라는 속성을 가지고 있어야 한다. ACID데이터베이스 내에서 발생하는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질이다.원자성(Atomicity), 일관성(Consisten..
복합키복합키란 두 개 이상의 칼럼을 하나의 key로 지정하는 것을 말한다.PK(기본키)는 한 테이블에 하나만 존재해야 하는데, 꼭 한 테이블에 칼럼 하나만을 기본키로 지정할 수 있는 것은 아니다. 복합키 설정CREATE TABLE student ( id bigint primary key, name varchar primary key);위와 같이 SQL 구문을 작성하게 되면 오류가 발생한다. CREATE TABLE student ( id bigint not null, name varchar not null, primary key(id, name));위와 같은 구문을 작성하게 되면 id, name 칼럼을 동시에 사용하는 복합기본키로 사용할 수 있게 된다. 주의사항복합키가 적용된 테이블에 데이터를 삽입을 할 ..
Cache(캐시)자주 사용하는 데이터의 값을 미리 복사해 놓는 임시 저장소를 캐시라고 한다.캐시는 저장공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다. 다음과 같은 경우에 캐시를 사용하게 되면 효과를 볼 수 있다.접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우 (서버의 균일한 API 데이터)반복적으로 동일한 결과를 반환하는 경우 (이미지, 썸네일 등)보통 Redis를 캐시로 많이 사용한다.싱글스레드로 원자성을 보장하고 NoSQL로 데이터의 입출력이 빠르기 때문이다.Redis에 대한 자세한 포스팅 : https://skroy0513.tistory.com/58캐싱전략캐시를 사용할 때는 '읽기 전략', '쓰기 전략'이 존재한다.읽기 전략에는 'Look Aside', 'Read Throu..
월요일에 서류 합격 연락을 받고 과제 전형을 시작하였다. 제출 기한은 목요일 자정까지라서 뭔가 충분한 거 같았지만... 과제 상세 내용을 살펴보니, 경험하지 못했던 기술의 적용과 (내가 생각하기에) 복잡한 산수 계산이 필요한 과제였다.그리고 가장 큰일은 11시부터 6시까지는 내가 알바를 한다는 점....ㅠㅠ 그래서 나는 월요일 알바가 끝나고 집에 오자마자 구현해야 하는 API 목록을 날짜별로 정리해서 스스로 마감기한을 정해놓았다. 일단 월요일은 프로젝트 기초 공사를 진행하였고,화요일인 오늘은(이미 수요일이 돼버리긴 했지만..) 조회하는 API,내일은 등록/삭제/조회 API,목요일은 최종 점검 및 제출위와 같은 스케줄을 작성하고 개발을 진행 중이다.(자세하게 적을 수는 없어서, 대충 큰 틀만 적은 것이다)..
JOINJOIN은 두 개 이상의 테이블을 연결 지어서 데이터를 조회하는 것이다. 관계형 데이터베이스는 모든 정보를 하나의 테이블에 저장하는 것이 아니라, 데이터가 정규화되어 여러 테이블에 분산되어 있다.데이터가 여러 테이블에 흩어져 있기 때문에 사용자가 원하는 데이터를 찾기 위해서는 여러 테이블을 다 조회해야 한다. JOIN은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 원하는 정보만 가져와 가상의 테이블처럼 만들어서 데이터를 조회하는 것이다.예시EMP테이블에는 사번, 이름, 소속부서번호가 있다.DEPT 테이블에는 부서번호, 부서명이 있다.아래와 같이 EMP테이블에서 사원의 이름을 가져오고, DEPT테이블에서 그 사원이 소속된 부서명을 조회해야 한다.JOIN은 EMP테이블과 DEPT테이블의 각각의 행..
https://skroy0513.tistory.com/70 개발자 성장 기록 51 - MyBatisMyBatis MyBatis는 SQL Mapper Framework이다. 개발자들은 MyBatis를 사용해서 JDBC 코드의 복잡하고 지루한 작업을 피할 수가 있다. MyBatis를 통해 간단한 key로 SQL문을 매핑하여 사용할 수도 있다. 또한 기존의skroy0513.tistory.com위 포스팅에 이어서 오늘은 MyBatis의 동적쿼리를 알아보도록 하자. 동적 쿼리란, 런타임 중에 조건에 따라 쿼리를 생성하고 실행하며 상황에 따라 다른 문법의 SQL을 적용하는 것을 말한다.동적 쿼리를 사용하면 사용자의 입력이나 프로그램의 상황에 따라 쿼리가 동적으로 변할 수 있다.test 속..
웹페이지는 정적 페이지와 동적 페이지로 나눌 수 있다. 정적 웹페이지는 웹서버에 저장된 .html 파일을 검색해서 문서 그대로 전달하여 브라우저에 보여준다. 동적 웹페이지는 저장된 내용을 다르게 가공하여 보여주는 방식이다.클라이언트가 웹 페이지를 요청하면 서버가 그 요청을 분석하여 응답결과를 HTML 문서로 만들어서 브라우저를 통해 보여준다.JSP (Java Server Pages)JSP는 HTML코드에 Java 코드를 사용하여 동적 웹페이지를 생성하는 웹 애플리케이션 라이브러리이다.JSP가 실행되면 Java Servlet으로 변환되어 웹 애플리케이션 서버에서 동작하게 되며, 생성된 데이터들을 웹페이지와 클라이언트를 통해 응답을 한다. JSP 동작과정브라우저가 웹 서버에게 JSP에 대한 요청 정보를 전달..
동일성 (Identity) 두 객체가 완전히 같은 경우를 말한다. 완전히 같은 경우라는 것은 Stack에 저장된 변수가 Heap 영역의 객체들 중 같은 객체의 주소를 가리키고 있다는 것이다. 즉, 같은 객체의 주소값을 바라보고 있는지를 비교하는 것이다. 위 그림에서 refVar2와 refVar3는 같은 객체(객체2)를 바라보고 있으므로 두 변수가 가리키는 객체는 동일하다고 말할 수 있다. 두 객체가 동일한지 아닌지는 == 연산자를 통해 판별할 수 있다. int, double, char 등의 Primitive 타입은 따로 객체를 가지지 않기 때문에 == 연산자를 사용하여 비교했을 시 같으면 true를 리턴한다. 동등성(Equality) 두 객체에 저장된 값이 같은 값인 경우를 의미한다. 동등성은 변수가 참..
네트워크에서 각 IT 장비들 간의 통신에 있어서 아주 중요한 것이 바로 주소, 즉 IP이다. 장비들이 서로 통신을 하면서 데이터를 주고받아야 하는데 과연 그 데이터를 어디로 보내야 하는가, 또 어디로 받아야 하는가에 대한 목적지가 바로 IP이다. 그 IP주소의 종류에는 IPv4, IPv6가 있다. IPv4가 사용되어 왔으나, 기하급수적으로 늘어나는 주소 때문에 공간이 부족해져서 IPv6가 새롭게 사용되고 있다. 먼저 순서대로 IPv4부터 알아보자. IPv4(IP version 4) 국내에서 표준을 정하고 정책에 수립하여 이용자에게 무한히 할당할 수 있는 자원이 아니라 전 세계적으로 관리되는 유한한 자원이다.(약 43억 개) 일부는 특수한 목적으로 사용될 수 있도록 예약되었으며, 주소 규정에 의하여 사용이..
MyBatis MyBatis는 SQL Mapper Framework이다. 개발자들은 MyBatis를 사용해서 JDBC 코드의 복잡하고 지루한 작업을 피할 수가 있다. MyBatis를 통해 간단한 key로 SQL문을 매핑하여 사용할 수도 있다. 또한 기존의 SQL문을 그대로 활용이 가능하고, 진입장벽이 낮은 편이어서 JDBC의 대안으로 많이 사용된다. 구성요소 MapperConfig XML 파일 : myBatis의 환경설정 파일 Mapper 인터페이스 : 데이터베이스 액세스 작업이 정의된 인터페이스 Mapper XML 파일 : Mapper 인터페이스의 메서드를 참조해서 작성한 매핑된 SQL 구문이 정의된 파일 개발 순서 1. 의존성 라이브러리 추가 spring-core spring-jdbc mybatis ..
2024.03.04 첫 번째 포스팅을 시작하였다. 약 한 달 하고 보름정도가 더 흐른 지금 시점에 기술 포스팅이 50개가 되었다. 지금까지 작성해 본 포스팅을 정리해 보자면 Java (18개) Call By Reference 오버라이드, 오버로드 JVM의 구조 Java의 컴파일 과정 JVM의 스택, 힙 Garbage Collector Java Map의 내부구현 IoC와 DI 제네릭 해시테이블, 해시맵, 해시셋 추상클래스 vs 인터페이스 Java의 버전별 차이 Java 직렬화 Thread Pool Concurrent Collection String vs StringBuffer, StringBuilder Java의 접근제어자 Spring (9개) JPA JPA의 더티체킹 MVC 모델 Annotation Sp..
인덱스(index)란? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 우리가 백과사전에서 원하는 정보를 찾기 위해서 맨 첫 장부터 하나씩 찾아가게 된다면 오랜 시간이 걸리기 때문에 책의 맨 앞에 색인을 추가하는데, 데이터베이스의 인덱스는 이 색인과 같다. 이처럼 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 전체 테이블을 스캔(Full Scan)하는 것이 아니라, 인덱스를 사용하여 검색 대상 레코드의 범위를 줄일 수 있다. 이는 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시킨다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그 이유는 해당 연산을 수..
Oracle과 MySQL은 많은 DB 툴 중에서 양대산맥이 아닐까 싶다. 나는 학원에서 처음 DB에 대해서 배울 때 Oracle을 배우고 프로젝트를 진행할 때 MySQL을 사용하였다. (이유는 단지 둘 다 경험을 해보고 싶어서 두 개 다 사용해 보았다. oracle은 MacOS를 정식으로 지원하지 않아서 docker를 통해 겨우겨우 실행한 경험이 있다...) 보통 Oracle은 충분한 예산과 복잡한 비즈니스를 요구하는 큰 프로젝트를 주로 수행하는 대기업이, MySQL은 돈이 적거나 중소기업들이 선호한다. 그럼 이 2가지 DB관리 툴에 대한 특징과 차이점이 무엇이 있는지 알아보자. Oracle 미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용..
개발의 WinG
나는 나는 자라서 멋진 개발자가 될거야