목록분류 전체보기 (78)
윤개발
문제 지구 온난화로 인하여 북극의 빙산이 녹고 있다. 빙산을 그림 1과 같이 2차원 배열에 표시한다고 하자. 빙산의 각 부분별 높이 정보는 배열의 각 칸에 양의 정수로 저장된다. 빙산 이외의 바다에 해당되는 칸에는 0이 저장된다. 그림 1에서 빈칸은 모두 0으로 채워져 있다고 생각한다. 그림 1. 행의 개수가 5이고 열의 개수가 7인 2차원 배열에 저장된 빙산의 높이 정보 빙산의 높이는 바닷물에 많이 접해있는 부분에서 더 빨리 줄어들기 때문에, 배열에서 빙산의 각 부분에 해당되는 칸에 있는 높이는 일년마다 그 칸에 동서남북 네 방향으로 붙어있는 0이 저장된 칸의 개수만큼 줄어든다. 단, 각 칸에 저장된 높이는 0보다 더 줄어들지 않는다. 바닷물은 호수처럼 빙산에 둘러싸여 있을 수도 있다. 따라서 그림 1..
에러처리 구현 이번 포스팅에서는 이전에 완료하지 못했던 에러처리에 대해 설명합니다. 에러처리에는 여러 방법이 있으나 이번 게시판에서는 네이버에서 사용하는 에러처리방법을 사용해보겠습니다. 네이버의 에러처리 { "errorMessage": "Authentication failed (인증에 실패하였습니다.)", "errorCode": "024" } 네이버는 에러코드와 함께 에러 메시지를 리턴하는 형식을 가지고있습니다. 에러처리 구현 이에 맞게 exception 폴더에 ErrorResponse 객체를 생성하겠습니다. 생성 전에 JSON으로 에러를 리턴하기위해 JSON-simple 이라는 의존성을 가져오도록 하겠습니다. pom.xml에 아래 의존성을 추가한 후 메이븐을 새로고침해줍니다. com.googlecode..
깨진 창문을 내버려 두지 말라. 엔트로피는 시스템 내의 무질서한 정도를 나타내는 물리학 용어이다. 소프트웨어의 무질서도가 증가할 때 이를 소프트웨어의 부패라고 부른다. 소프트웨어의 부패가 발생하는데에는 심리적이거나 문화적인 요소가 있다. 깨진 창문이론 오랜 기간 수리하지 않고 방치된 창문 하나가 거주자들에게 버려진 느낌을 스며들게 한다. 강국자들이 그 건물에 별 관심이 없다는 느낌이다. 그래서 다른 창문이 하나 더 꺠진다. 사람들은 이제 어지르기 시작한다. 심각한 구조적 손상이 시작되고 느낌은 현실이 되어버린다. 깨진창문을 내버려 두지 마라. 나쁜 설계, 잘못된 결정, 혹은 형편없는 코드를 고치지 않은채로 내버려 두지 마라. 발견하자마자 고쳐라. 고칠 시간이 벗다면 주석으로 처리하거나 '구현되지 않았음'..
가장 큰 약점은 약점을 보일 것에 대한 두려움이다. - 보쉬에 실용주의 철학의 초석 중 하나는 자신과 자신의 행동에 대해 책임을 지는 것이다. 무지나 실수를 인정하는 일은 가장 즐거운 부분은 아니지만 분명 일어나는 일이다. 우리는 자신의 능력에 대해 자부심을 가질 수 있지만 실수나 무지 같은 단점에 대해서도 정직해져야 한다. 1. 책임지기 실수를 저지르거나 잘못된 판단을 했다면 정직하게 인정하고 다른 방안을 제안하도록 노력하라. 다른 무언가를 비난하거나 변명을 만들어 내지말고 해결안을 제공하는 것은 여러분에게 달려있다. "고양이가 내 소스코드를 삼켰어요" 라고 말하는 것은 별 도움이 안될 것이다. 어설픈 변명을 만들지 말고 대안을 제시하라. 안된다고 하지 말고 상황을 개선하기 위해 무엇을 할 수 있는지 ..
당신이 가진 생각이 하나밖에 없다면, 그것만큼 위험한 것은 없다. - 에밀 사르티에 만약 어떤 사실을 굳게 믿고 그 사실에 전적으로 의존하고 있다면, 거의 100% 그것이 변하게 될 것이다. "이 것은 이 방법으로만 해결 할 수 있어"와 같은 근시안 적인 생각을 갖고 프로젝트에 참여한다면 아마도 예상치 못했던 경우에 의해 한숨지을 일이 많을 것이다. 1. 가역성 우리가 프로젝트 초기에 항상 최선의 결정을 내리는 것은 아니라는 점에서 유연한 프로젝트를 만들어야 한다. 프로젝트의 초기에 특정 관계형 데이터베이스를 사용하기로 결정했다고 치자. 한참 후 성능 테스트를 하면서 너무 느리다는 사실을 발견 했고 다른 데이터베이스가 더 빠르다는 것을 알게 되었다. 특정 데이터베이스를 사용하는 코드들이 전반에 퍼져 있을..
설계, 빌드, 테스트 그리고 확장하기에 쉬운 시스템을 만드는데에 있어 직교성은 매우 중요한 개념이다. 1. 직교성이란? 직교성은 기하학에서 빌려온 용어다. 그래프의 축과 같이 두 직선이 직각으로 만나는 경우 직교한다고 말한다. 벡터의 입장에서 보면, 두 개의 선은 독립적이다. 컴퓨팅에서 이 용어는 결합도 줄이기를 의미한다. 하나가 바뀌어도 나머지에 어떤 영향도 주지 않는다면 직교한다고 할 수 있다. 2. 직교성의 장점 비직교적인 시스템은 본질적으로 변화와 조정을 하기가 복잡하다. 시스템의 컴포넌트들이 고도로 상호의존적인 경우, 특정 부분만 수정하는 방법이란 없다. 관련 없는 것들 간에 서로 영향이 없도록 하라. 컴포넌트들이 각기 격리되어 있으면 어느 하나를 바꿀 때 나머지 것들을 걱정하지 않아도 된다. ..
이번 포스팅에서는 User의 Controller, Service, Repository 를 생성하고 회원가입 API를 만들어보겠습니다. 먼저 JpaRepository를 상속받는 UserRepository를 생성합니다. JPARepository를 상속받으면 기본적인 CRUD는 자동생성되며 메소드 이름으로 쿼리를 만들 수 있습니다. package com.board.My.Board.repository; import com.board.My.Board.domain.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { } 이처럼 껍데기만 만들어도 기본..
www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,0..
Garbage Collection란? Java에서는 메모리 관리를 명시적으로 해제하지 않고 Garbage Collection(이하 GC)가 자동으로 수행한다. JVM이 GC를 실행할 때 GC를 실행하는 스레드를 제외한 모든 스레드를 중단하는데 이를 stop-the-world 라고한다. stop-the-world가 일어나면 다른 스레드가 실행되지 않기 때문에 GC를 튜닝한다는 것은 stop-the-world 시간을 최소화하는데에 있다. GC는 더이상 필요없는 객체(쓰레기)를 정리하는데 GC는 2가지의 가정하에 만들어졌다. - 대부분의 객체는 금방 접근 불가능한 객체가 된다. - 오래된 객체(생성된지 오래된)에서 젊은 객체(생성된지 얼마되지 않은)로의 참조는 거의 일어나지 않는다. 이러한 가설을 'weak ..
이제 본격적으로 백엔드 API의 Domain을 생성하겠습니다. 먼저 클래스들의 분리를 위해 아래와 같이 패키지 폴더들을 만들어주시면 됩니다. config 폴더는 프로젝트의 설정파일들이 위치할 장소입니다. 나머지 폴더는 이전 포스트에서 설명한 클래스들이 위치할 장소입니다. DB 스키마 생성을 위해 domain 폴더 밑에 Board와 User 클래스를 생성하겠습니다. 간단한 게시판이므로 테이블의 관계는 위 사진과 같습니다. 아래는 User 클래스의 내용입니다. import lombok.Getter; import javax.persistence.*; @Entity @Getter public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @C..