본문으로 건너뛰기

stack — 최근 글

최근
Java EcoTILSpring Framework

JDBC의 Prepared Statement

NamedParameterJdbcTemplate query()) 가장 정확한 사용법 일반 JdbcTemplate은 SQL을 실행할때 Prepared Statement 라는게 있는데, 쌩 SQL을 사용하는게 아니라 SELECT FROM user WHERE id = ? 이런식으로 일정 형식문자열로 SQL을 준비하는 것이다. 저걸 Prepared Statement 라고 부른다. 그러면, 저 쿼리를 DB가 받으면 무슨일을 하냐면. SQL을 파싱하여 대기 상태로 놓는다. → 만약 기존에 동일한 SQL쿼리가 있었다면 그 쿼리캐시를 재사용해서
Java EcoTILJava programming

Java; Optional

Optional 개체 를 만드는 방법에는 여러 가지가 있습니다. 빈 Optional 객체 를 생성하려면 empty() 정적 메서드 를 사용하기만 하면 됩니다 . isPresent() 메서드를 사용 하여 Optional 객체 내부에 값이 있는지 확인했습니다 . 값은 null 이 아닌 값으로 Optional 을 만든 경우에만 존재 합니다. 다음 섹션에서 isPresent() 메서드를 살펴보겠습니다 . 또한 Java 11부터 isEmpty() 메서드로 반대 작업을 수행할 수 있습니다 . 다른 예시를 들어보자 이 코드 대신 아래의 코드로
EngineeringTILCo-work

git flow의 실제 사용

main이나 develop등 공용 브랜치에 커밋을 하지 않는다 → feature 브랜치로 따로 따서 작업한다. git checkout -b "feature/NUM" 공용 브랜치를 자주자주 pull 받아 브랜치를 최신으로 유지한다 (예를들어 develop) 공용 브랜치는 upstream으로 지정한다 git remote add upstream [URL] git pull upstream [공용브랜치] git push origin
EngineeringTILCo-work

GitHub Actions 으로 간단한 CD 구성하기

본 글이 인기가 좋아 후속편을 작성했다. 아래 간단히 배포하는 것 보다 좀 더 세분화 된 내용을 담았다. 글 보러가기 기본적으로 github action에서 호스트로 push하는 방식이다. ${{ secrets.HOST }}를 비롯한 나머지 4개의 환경변수는 Setting secrets 에서 등록한다. 주요내용은 main 브랜치에서 push가 일어나면 github의 ubuntu 인스턴스에서 ssh를 통해 원격지의 deploy.sh를 실행시킨다는 내용이다. 이 스크립트가 하는 내용은 다음과 같다 저장소에서 코드 가져오기 Maven 빌
Java EcoTILMapper

MyBatis와 Spring Boot (Annotation)

application.properties 보통 insert작업을 하면 0이나 1로 리턴값을 받기 보다는 전체의 값을 반환 받는다. 그러나 id의 경우 DB에서 auto increment기 때문에 별도의 작업이 필요하다. 객체를 그대로 반환하면 입력값 그대로 반환되지만 id는 값이 설정되지 않는다. property를 설정하기 위해 mapper에서 옵션을 지정해줘야한다 @Options를 통해 생성된 키를 가지고 keyProperty를 설정하면, 자동으로 생성된 id값이 객체의 id변수에 설정된 상태로 반환된다. id를 가지고 selec
FundamentalTILOperating System

Virtual Memory

가상 메모리라는 것은 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다. 이 기법의 주요 장점중 하나는 사용자 프로그램이 물리 메모리 보다 커져도 된다는 점이다. 많은 경우에 프로그램 전체가 한꺼번에 메모리에 늘 올라와있어야 하는것은 아니다 아래의 예시가 있다. 프로그램에는 잘 발생하지 않는 오류 상황을 처리하는 코드가 종종 존재한다. 이러한 오류들은 거의 발생하지 않으므로 실행되지 않는다. 배열, 리스트, 테이블 등은 필요 이상으로 많은 공간을 점유할 수 있다. 실제로 10 by 10만 사용하는데도 불
FundamentalTILOperating System

Memory

프로세스에게 메모리를 할당하는 방법 컴퓨터 시스템에서 페이징의 동작 방법 메모리는 각각 주소가 할당된 이련의 바이트들로 구성된다. CPU는 프로그램 카운터가 지시하는 대로 메모리로부터 다음 명령어를 가져온다. 명령어는 필요한 경우 추가적인 데이터를 더 가지고 올수도 있고 내보낼 수도 있다. 메인 메모리와 프로세서 자체에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한 범용 저장장치다. 어셈블리 메모리 주소만을 인수로 취하고, 디스크의 주소를 인수로 취하지 않는다. 실행되는 명령어와 데이터들은 CPU가 직접적으로 접근
FundamentalTILOperating System

CPU Scheduling

스레드를 지원하는 운영체제에서는 실질적으로 운영체제는 프로세스가 아니라 커널 수준 스레드를 스케줄 한다. 프로세스 스케줄링과 스레드 스키줄링은 상호교환적으로 사용된다. 일반적인 스케줄링 개념을 논의하는 경우 프로세스 스케줄링을 사용하고 스레드에 국한된 개념을 가리키는 경우 스레드 스케줄링이라는 용어를 사용한다. 단일 프로세서 시스템에서는 한 순간에 오직 하나의 프로세스만이 실행할 수 있다. 다중 프로그래밍의 목적은 CPU 이용률을 최대화 해 항상 실행중인 프로세스를 가지게 하는데 있다. 하나의 프로세스는 전형적으로 어떤 입출력 요청