전체 글 140

시스템 소프트웨어(System software)의 종류

소프트웨어는 크게 2가지로 분류할 수 있다. 시스템 소프트웨어(System software) 응용 소프트웨어(Application software) 시스템 소프트웨어 시스템 소프트웨어는 하드웨어를 컨트롤할 수 있는 소프트웨어를 말한다. 대표적인 예로 운영체제(OS)가 있다. 예를 들어, 곰플레이어로 영상을 보고 싶다고 가정해 보자.곰플레이어는 모니터에게 "영상을 출력해" 라고 말할 권한이 없어서 운영체제로 요청해야 한다. 곰플레이어가 운영체제에게 "모니터에 영상을 출력해주면 안 될까?" 요청하면 운영체제는 받아들인다. 그제야 하드웨어는 운영체제의 명령을 받아 모니터에 영상을 출력한다. 이렇게 하드웨어를 컨트롤할 수 있는 소프트웨어가 시스템 소프트웨어다. 장치를 움직이게 하는 소프트웨어인 셈이다. 단순하게..

자료구조(Data Structure)와 추상자료형(ADT)

자료구조와 알고리즘 컴퓨터가 기본적으로 하는 일은 아래와 같다. 데이터 저장 데이터 연산 이 기준으로 자료구조와 알고리즘을 정의 내릴 수 있다. 자료구조는 데이터를 저장할 때, 어떻게 하면 컴퓨터가 처리하기 쉽게 만드는지를 다루는 것이다. 알고리즘은 데이터를 연산할 때, 어떻게 하면 컴퓨터가 처리하기 쉽게 만드는지를 다루는 것이다. 다시 말해 자료구조(Data Structure)는 자료를 저장하는 방법이고, 알고리즘(Algorithm)은 문제를 효율적으로 해결하기 위한 방법이라고 할 수 있다. 모든 상황에 좋은 자료구조는 존재하지 않으므로, 상황에 따라 효율적인 자료구조를 선택하고 알고리즘을 구현해야 한다. 또한 알고리즘을 적용하지 않아도 문제를 해결할 수 있지만, 문제의 크기가 커진다면 성능을 위해 반..

Java에서 UUID를 이용해서 난수 생성하기 (feat. SecureRandom)

UUID UUID (Universally Unique Identifier) 는 말그대로 범용 고유 식별자로 사용할 수 있는 ID를 말한다. 보통 다른 값과 중복되지 않는 유니크한 값을 생성해야 할 때 사용하는데, 예를 들어 세션 식별자, 쿠키 값, 무작위 데이터베이스 키 등에 사용하곤 한다. UUID를 통해 생성된 난수는 중복될 수도 있다. 하지만 중복되는 확률이 굉장히 희박해서 사실상 중복이 아니라고 볼 수 있는 셈이다. UUID를 활용한 예제를 보자. import java.util.UUID; public class Sample { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid...

Java에서 서버 호스트(host) 정보 가져오는 법

로컬, 개발, 운영 서버간 다르게 동작을 처리해야 할 경우가 있다. 이럴 때 InetAddress.getLocalHost()를 이용하여 호스트 정보를 가져와서, 로컬 서버인지 구분할 수 있다. 호스트 정보 가져오는 예제 import java.net.InetAddress; import java.net.UnknownHostException; import lombok.extern.slf4j.Slf4j; public class Sample { public static void main(String[] args) { System.out.println("호스트 정보 : " + getHostInfo()); } public static String getHostInfo() { String hostName = ""; S..

[Mybatis] 오라클 DB insert 이후 idx 값 가져오기 (nextVal, currVal)

오라클 DB에서 데이터 insert할 때 시퀀스로 idx를 생성하곤 한다. 만약 insert한 idx값을 바로 가져와야 할 경우 selectKey를 사용하면 된다. 예시를 들어보자. 아래 같이 테이블, 시퀀스가 만들어졌다고 가정한다. -- 테이블 생성 CREATE TABLE board ( board_id NUMBER NOT NULL, title VARCHAR2(50), wirter VARCHAR2(50) ) -- 시퀀스 생성 CREATE SEQUENCE sq_board_id START WITH 1 INCREMENT BY 1 MANVALUE 1 MAXVALUE 999999999 CYCLE CACHE 50; xml 쿼리에서 insert 태그 안에 selectKey 옵션을 사용해서 생성한 idx값을 바로 리턴..

Computer Science/DB 2023.11.22

H2-console에서 Localhost에서 연결을 거부했습니다. 오류 발생시 해결법

문제 발생 h2-console로 접속하니 아래처럼 'localhost에서 연결을 거부했습니다'로 콘솔 접속이 거부된다. 해결 방법 1 만약 스프링 시큐리티(Spring security)를 적용했다면 h2-console 경로에서도 접근 가능하도록 설정을 해줘야 한다. antMatchers 메서드에 "/h2-console/**"을 추가해준다. @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/h2-console/**)") .permitAll; } 해결 방법 2 그래도 동작하지 않는다면 X-Frame-Options 기능을 꺼본다. 스프링 시큐리티에서는 기본적..

Computer Science/DB 2023.11.20

스프링부트 개발환경 구성하기 (8) 동적 정렬처리

포스팅 순서는 아래와 같다. OpenJDK 17 설치 STS 4 설치 스프링부트 프로젝트 생성 메이븐 Local Repository 설정 DB 설계와 REST API 설계 mybatis 연동과 게시판 목록 조회 페이징 (Mybatis에서 Pageable) 동적 정렬처리 (현재 포스팅) 동적으로 정렬 처리하기 이전 포스팅에서는 Pageable을 이용하여 페이징을 구현해보았다. 이번에는 좀 더 응용해서 등록일자 기준으로 동적으로 정렬 처리를 해보자. BoardController.java package com.company.helloBoard.domain.board.controller; import org.springframework.beans.factory.annotation.Autowired; import..

스프링부트 개발환경 구성하기 (7) 페이징 (Mybatis에서 Pageable)

포스팅 순서는 아래와 같다. OpenJDK 17 설치 STS 4 설치 스프링부트 프로젝트 생성 메이븐 Local Repository 설정 DB 설계와 REST API 설계 mybatis 연동과 게시판 목록 조회 페이징 (Mybatis에서 Pageable) (현재 포스팅) 동적 정렬처리 Pageable의 오해 Spring Data에서 제공하는 Pageable을 사용하면 페이징 작업을 좀 더 간편하게 개발할 수 있다. 처음에는 Pageable에 대해 알게 되었을 때, JPA에서만 사용할 수 있는 것으로 생각했다. 왜냐하면 대다수의 블로그에서 Spring Data JPA에서 제공되는 기능이라는 식으로 잘못된 정보를 기술하고 있었기 때문이다. 하지만 Mybatis에서도 사용할 수 있다. Spring Data에서..

Spring Boot 내장톰캣 war 배포시 한글 깨짐 설정

문제 발생 spring boot로 제작된 프로젝트를 실행하려면, 프로젝트를 war 또는 jar 파일로 export 하여 아래처럼 해당 파일을 실행하면 된다. java -jar example.war 실행해보니 톰캣 서버가 정상적으로 시작되었지만, 로그로 남긴 한글들이 모두 깨짐 현상이 발생하였다. 해결 방법 파일 인코딩 문제이므로 java -jar 파일 실행 시 직접 encoding을 설정해 주면 된다. java -Dfile.encoding=UTF-8 -jar example.war

스프링부트 개발환경 구성하기 (6) Mybatis 연동과 게시판 목록 조회

📢 2024년 2월 기준으로 포스팅 내용을 업데이트하였습니다. 포스팅 순서는 아래와 같다. OpenJDK 17 설치 STS 4 설치 스프링부트 프로젝트 생성 메이븐 Local Repository 설정 DB 설계와 REST API 설계 mybatis 연동과 게시판 목록 조회 (현재 포스팅) 페이징 (Mybatis에서 Pageable) 동적 정렬처리 1. Mybatis 라이브러리 추가 기본적으로 생성되는 스프링부트 프로젝트는 Mybatis를 포함하지 않는다. 따라서 스프링부트에서 Mybatis를 설정할 수 있는 라이브러리를 설치해야 한다. 아래의 mybatis-spring-boot-autoconfigure 요구사항 표를 보면 Spring Boot, Java 버전에 따라 버전이 명시되어 있다. 내 Spring..