stack

stack from platanus

JdbcTemplate의 SimpleJdbcInsert Bean 등록에 관하여

SimpleJdbcInsert 빈 등록에 대하여 Reference 일단 오류와 상관없이.. SimpleJdbcInsert를 빈으로 만드는건 뭔가 이상한듯 저게 저 Repository에서만 쓸텐데.. 저걸 빈으로 만들어서 얻는 이점이 없음 JDBC 드라이버에서 제공해주는 DB 메타데이터를 사용해서 insert 쿼리 정보로 사용한다던데 왠지 빈으로 등록 시점에 JDBC 연결이 완료되지 않았을수도 있겠다 여튼, Entity 객체에서 리플렉션으로 '타입'정보를 꺼내쓴다면 애초에 dataSource같은게 필요없겠지 (순수 Java 리플렉션만으로 될테니)... » read more

세션을 사용하기 위한 Filter와 Interceptor

HttpSession 세션 생성을 자동으로 해주는 객체 기본 사용법 Tracking session 쿠키를 지원하는지 안하는지 서버는 모른다. 그래서 주소에 JSESSIONID를 세션 생성할때 내려 보내는데 이것을 모든 컨트롤러에서 다 파싱을 해야하니 불편하다. 대게는 쿠키지원을 하니까 tracking-modes를 cookie로 변경하면 주소에 JSESSIONID가 사라진다. Session timeout Filter, Interceptor Filter : 서블릿 Interceptor : 스프링 Filter 만약 로그인 여부 체크를 컨트롤러마다 해야... » read more

JDBC의 Prepared Statement

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

Java; Optional

기본적인 사용법 Optional 객체 만들기 Optional 개체 를 만드는 방법에는 여러 가지가 있습니다. 빈 Optional 객체 를 생성하려면 empty() 정적 메서드 를 사용하기만 하면 됩니다 . 값의 비교 isPresent(), isEmpty() isPresent() 메서드를 사용 하여 Optional 객체 내부에 값이 있는지 확인했습니다 . 값은 null 이 아닌 값으로 Optional 을 만든 경우에만 존재 합니다. 다음 섹션에서 isPresent()... » read more

git flow의 실제 사용

git을 잘 쓰기 위한 브랜치 사용법 main이나 develop등 공용 브랜치에 커밋을 하지 않는다 → feature 브랜치로 따로 따서 작업한다. git checkout -b "feature/NUM" 공용 브랜치를 자주자주 pull 받아 브랜치를 최신으로 유지한다 (예를들어 develop) 공용 브랜치는 upstream으로 지정한다 git remote add upstream [URL] git pull upstream [공용브랜치] git push origin [공용브랜치] git의 커밋 흐름은 파일 단위가... » read more

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

GitHub Actions CI/CD 기본적으로 github action에서 호스트로 push하는 방식이다. GitHub Actions workflow ${{ secrets.HOST }}를 비롯한 나머지 4개의 환경변수는 Setting - secrets 에서 등록한다. 주요내용은 main 브랜치에서 push가 일어나면 github의 ubuntu 인스턴스에서 ssh를 통해 원격지의 deploy.sh를 실행시킨다는 내용이다. deploy.sh 내용 (20210920 업데이트) 이 스크립트가 하는 내용은 다음과 같다 저장소에서 코드 가져오기 Maven 빌드하기 (package로 jar파일... » read more

MyBatis와 Spring Boot (Annotation)

MariaDB Docker 설치 DBeaver 설치 DB 생성 boot 프로젝트 생성 mariadb driver setup application.properties insert하는 컨트롤러 작성 POST 테스트 Select기능 만들기 Mapper Controller GET 테스트 Insert 개선 보통 insert작업을 하면 0이나 1로 리턴값을 받기 보다는 전체의 값을 반환 받는다. 그러나 id의 경우 DB에서 auto increment기 때문에 별도의 작업이 필요하다. 객체를 그대로 반환하면 입력값 그대로 반환되지만... » read more

Virtual Memory

가상 메모리 가상 메모리라는 것은 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다. 이 기법의 주요 장점중 하나는 사용자 프로그램이 물리 메모리 보다 커져도 된다는 점이다. 배경 많은 경우에 프로그램 전체가 한꺼번에 메모리에 늘 올라와있어야 하는것은 아니다 아래의 예시가 있다. 프로그램에는 잘 발생하지 않는 오류 상황을 처리하는 코드가 종종 존재한다. 이러한 오류들은 거의... » read more

Memory

메모리 관리 프로세스에게 메모리를 할당하는 방법 컴퓨터 시스템에서 페이징의 동작 방법 배경 메모리는 각각 주소가 할당된 이련의 바이트들로 구성된다. CPU는 프로그램 카운터가 지시하는 대로 메모리로부터 다음 명령어를 가져온다. 명령어는 필요한 경우 추가적인 데이터를 더 가지고 올수도 있고 내보낼 수도 있다. 기본 하드웨어 메인 메모리와 프로세서 자체에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한... » read more

CPU Scheduling

CPU 스케줄링 스레드를 지원하는 운영체제에서는 실질적으로 운영체제는 프로세스가 아니라 커널 수준 스레드를 스케줄 한다. 프로세스 스케줄링과 스레드 스키줄링은 상호교환적으로 사용된다. 일반적인 스케줄링 개념을 논의하는 경우 프로세스 스케줄링을 사용하고 스레드에 국한된 개념을 가리키는 경우 스레드 스케줄링이라는 용어를 사용한다. 기본 개념 단일 프로세서 시스템에서는 한 순간에 오직 하나의 프로세스만이 실행할 수 있다. 다중 프로그래밍의 목적은 CPU 이용률을... » read more