본문 바로가기

Programming

(61)
Git 기본 개념과 사용법 1. 레포지토리(repository) 프로젝트를 하나 진행한다고 생각해보자. 이 프로젝트 디렉토리를 깃으로 버전관리하기 시작하면, 원하는 시점마다 디렉토리안에 어떤 것들이 있는지, 내용이 어떻게 변해가는지 초창기 모습부터 버전별로 담겨있을 것이다. (SnapShot) git으로 관리하면 프로젝트 디렉토리 안에 .git이라는 숨겨진 디렉토리가 만들어진다 여기엔 변경사항들이 들어있다 2.커밋(commit) 프로젝트 진행시에 "이 시점의 모습을 남기고 싶다" 라고 생각될때가 있을 것이다. 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위와 그 결과물을 커밋이라고 한다. 그리고 이 커밋이 저장되는 곳이 레포지토리이다. Repository 만들기 mkdir book - book이라는 디렉토리를 만드는..
GitHub란 Git으로 버전관리와 협업이 가능하다고 했는데 이 외에도 Git은 "다른 컴퓨터에 작업물을 보내는" 것이 가능하다 작업물을 다른 컴퓨터에 보낸다는 것은 다른 컴퓨터에 작업물의 백업본을 만들어 두는 것과 같다. 내 컴퓨터에서 작업물이 사라지거나 문제가 생겼을때 백업본을 가져와서 복구할 수 있다. 이 외부 컴퓨터는 직접 준비할 수 있지만, 너무 번거롭다. 이를 서비스 해주는게 GitHub이다. 말하자면 내 백업본을 관리해주는 사이트이다. 원격 저장소를 대신 제공해주는 서비스 Git vs Github Git은 버전관리를 해주는 프로그램 Github은 Git으로 관리되는 프로젝트를 올려놓을 수 있는 사이트이다. 외부 컴퓨터에 올릴 수 있다면 다른사람과 협업도 수월해진다. 내가 A라는 기능을 개발해서 Github..
Git이란 코드 버전 관리 프로그램 여기서 버전 관리란, 대학 과제 제출시에 발표자료 발표자료(수정) 발표자료(수정1) 발표자료(최종) 발표자료(최종끝) 발표자료(진짜최종) 과 같이 해본 적이 있지 않나? 이전에 있던 파일을 혹시몰라 남겨둔 채로 새로운 작업을 할 때가 많다. 그리고 이 와중에도 무엇이 달라졌는지 변경점을 알고 싶다면 파일을 하나하나 열어봐야 하는데, 이를 막기 위해서는 버전 관리가 필요하다 버전관리란 파일의 변화를 시간에 따라서 기록했다가 나중에 특정 시점의 버전을 꺼내올 수 있는 방법이다. 버전관리의 장점은 1. 지난 과정을 확인 가능하다는점 (어떤 변경점이 있었는지) 2. 문제가 생기면 이전 버전으로 돌아갈 수 있다 Git은 코드 버전 관리 프로그램으로, Git은 매번 작성했던 코드의 모습을 ..
프로토 타입과 스코프 기본적으로 스프링의 빈은 싱글톤으로 만들어진다. 싱글톤-> Application Context 마다 Bean의 오브젝트가 한 개만 만들어진다. 사용자의 요청이 있을 때마다 매번 애플리케이션 로직을 담은 오브젝트를 만드는 건 비효율적이기 때문이다. 하지만, 하나의 빈 오브젝트에 동시에 여러 스레드가 접근하기 때문에 상태값을 인스턴스 변수에 저장해두고 사용할 수는 없다. 그래서 보통 싱글톤의 필드에는 의존관계에 있는 빈에 대한 레퍼런스 or 읽기전용 값만 저장해두고 오브젝트의 변하는 상태를 저장하는 인스턴스 변수는 두지 않는다. 애플리케이션 로직((ex) 사용자 요청 저장해서 전달하는 폼 지원 오브젝트, DB나 비즈니스 로직에 의해 새로 만들어지는 DTO] 을 담은 오브젝트는 싱글톤 빈으로 만들면 충분하다...
[백준] 18870 - 좌표 압축 - JAVA[자바] [접근 방법] "좌표 압축" 은 coordinate Compression(좌표 압축) 이라고 하는 문제의 한 카테고리를 차지하고 있다. 데이터의 범주가 너무 크거나, 단순화하여 문제를 세분화 시킬 때 사용할 수 있다. 이번 문제를 해석하면 배열의 각 원소에 대해 순위를 매긴다 라고 생각하면 된다. 예제 입력 1에서 {2, 4, -10, 4, -9} 가 있을 때 내림차순으로 순위를 매긴다면 {2, 3, 0, 3, 1} 이 된다. 즉, 1. 낮은 값이 높은 순위(0순위) 를 갖는다. 2. 중복되는 원소는 같은 순위를 갖는다. 이때 정렬을 떠올리는 것이 좋은 접근방법이다. 또, "2. 중복되는 원소는 같은 순위를 갖는다." 에서 중복되는 원소를 하나만 갖는게 중요하므로 자료구조 중 Set 혹은 Map을 사용하..
[백준]2108 - 통계학 - JAVA[자바] [접근방법] Counting 정렬(카운팅 정렬) 을 이용하려 한다. ( O(N) ) 정렬을 쉽게 하기위해 Arrays.sort(배열) 을 이용할 수 있지만, 3번째의 최빈값을 구할때 "두 번째로 작은 값" 을 출력해야 하므로 복잡하다. Arrays.sort를 사용시 ( O(NlogN) ) 중앙값 : (N+1) 위치 범위: (N-1) 번째 인덱스 값 - 0번째 인덱스 값의 차 최빈값 : 배열 첫 번째부터 탐색. 각 값별 최빈값을 count하면서 가장 큰 빈도수 중, 두 번째로 작은 값 찾아내야함 => 플래그(flag) 변수를 하나 두고, 빈도수가 같았던 적이 있는지 여부를 판별해야 한다. 최빈값 : 이전의 최빈값의 최댓값보다 현재 최빈값이 더 클 경우 즉, 처음으로 나타난 최빈값일 경우 해당 index(i..
모의 쇼핑몰 만들어보기 #1 프로젝트 생성 프로젝트 스펙은 아래와 같이 설정했다. - 서버에서 가공한 데이터를 뷰에 보여주기 위해 템플릿 엔진 Thymeleaf를 추가했고, - Spring Data JPA는 JPA를 손쉽게 구현할 수 있도록 추가했고, - 프로젝트에서 사용할 DB로 MySQL을 사용하려 했고, - H2는 자바기반의 RDMBS로 메모리 데이터 베이스 기능을 지원해 비록 데이터를 영구적으로 저장하는데 권장되진 않지만, 매우 가볍고 빠른 데이터베이스다. 그래서 테스트용 DB로 많이 사용된다. 왜 MySQL을 썼는가? 더보기 여러가지 이유가 있겠지만, "쇼핑몰을 구현하는데 MySQL이 손색없기 때문이다." 라는 이유가 가장 적합하겠다. MySQL의 장점으로는 1. 많은 사용자가 한번에 DB에 접근할 수 있다는 것 2. 다른 프로그래밍 언..
[백준] 1712 - 손익분기점 -JAVA[자바] 문제의 개념이 다소 복잡하게 설명되어 있지만, 문제의 요지는 [가격(C) - 한대 생산에 드는 비용(B)] 이 고정비용(A) 보다 커지는 순간이 언제인가 하는 것이다. 따라서, C-B < 0일 경우에는 손익분기점이 존재할 수 없다. 손익분기점은 A / (C-B) 인 지점에서 1개가 더 팔렸을때! 이므로 import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new..