분류 전체보기 142

Github를 트리 구조로 볼 수 있는 Octotree 플러그인

Github에서 꽤 유용한 Octotree라는 크롬 플러그인을 알게 되었다. 이 플러그인으로 GitHub 저장소의 디렉토리를 한 눈에 파악할 수 있다. Octotree Octotree는 아래 사진과 같이 사이드바에서 트리 형식으로 저장소의 디렉토리 구조를 보여준다. 개인 저장소(Private repository) 또는 Enterprise GitHub에도 Access Token만 설정하면 사용이 가능하다. References Octotree GitHub

개발자 역량 평가

퍼블리싱 1. 웹페이지 코딩 간단한 HTML 문법과 CSS 문법을 알고 사용할 수 있다 div로 레이아웃을 잡고 코딩을 할 수 있다 (Box model을 이해한다) 웹 표준을 어느 정도 이해하고 있다 (DTD를 알고 있다) 웹 접근성과 시맨틱한 마크업에 대해 숙지하고 있으며 관심이 깊다 2. 크로스 브라우징 인터넷 익스플로러밖에 사용해 보지 않았다 특정 모바일 디바이스에 최적화된 페이지를 만들어 본 경험이 있다 각 브라우저의 렌더링 이슈를 알고 있으며 해결해 본 경험이 있다 브라우저핵의 존재를 알고 있으며, 우아한 퇴보 기법의 일부를 숙지하여 코딩할 수 있다 3. jQuery 간단한 셀렉터와 실행 문법을 알고 있다 다양한 플러그인을 사용해본 경험이 있다 제법 복잡한 셀렉터를 다룰 수 있고, 메소드 체이닝..

[Book] 객체지향의 사실과 오해를 읽고

이 책의 제목은 '객체지향의 사실과 오해'이고, 부제는 '역할, 책임, 협력 관점에서 본 객체지향'이다. 부제에서 이 책의 핵심이자 결론이 나왔다. 읽기 전부터 책의 크기와 두께가 만족스러웠다. 객체지향 원리를 다룬 다른 서적들과는 달리 300쪽이 되지 않아서 가벼운 마음으로 책을 읽을 수 있다. 저자가 언급하길, 다음 권으로 가기전 필요한 개념 및 배경 지식을 제공하기 위한 용도라고 말하였으니, 아마 처음부터 분량을 제한해두고 집필해서 책이 얇은 것이라는 생각이 들었다. 내용은 총 7장과 부록으로 이루어져 있는데, 특이하게 구현 코드가 나오는 부분은 마지막 장 밖에 없다. 나머지는 글과 그림으로 채워져 있어서 읽다가 꽤 지루할 줄 알았는데, 한 줄씩 의미를 되짚어보며 차분히 읽어보니 코드가 없는 글임에..

IT Note/리뷰 2023.11.24

시스템 소프트웨어(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...

Backend/Java 2023.11.23

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..

Backend/Java 2023.11.22

[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..