All
94 posts
SpringBatch 간단 정리

스프링 배치의 장점 대용량 데이터 처리에 최적화되어 고성능을 발휘 효과적인 로깅, 통계 처리, 트랜잭션 관리 등 재사용 가능한 필수 기능 지원 수동으로 처리하지 않도록 자동화 스프링 배치 주의사항 스프링 부트 배치는 스프링 배치를 간편하게 사용 할 수 있게 래핑한 프로젝트입니다. 따라서 스프링 부트 배치와 스프링 배치에 모두에서 다음과 같은 주의사항을 염두해야 한다. 데이터를 직접 사용하는 편이 빈번하게 일어나므로 데이터 무결성을 우지하는데 유효성 검사 등의 방어책이 있어야한다. 배치 처리 시스템 I/O 사용을 최소화 필요. 잦은 I/O로 데이터베이스 커넥션과 네트워크 비용이 커지면 성능에 영향을 줄 수 있기 때문. 따라서 가능하면 한번에 데이터를 조회하여 메모리에 저장해두고 처리를 한 다음 그결과를 한번에 데이터베이스에 저장하는것이 좋다. 일반적으로 같은 서비스에 사용되는 웹 API, 배치, 기타 프로젝트들을 서로 영향을 줍니다. 따라서 배치 처리가 진행되는 동안 다른 프로젝트 …

가비지 컬렉션(GC)의 원리와 종류

1. 가비지 컬렉션? JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 (참고) JVM의 메모리 구조 메소드 영역 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드의 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, Type정보(Interface인지 class인지), Runtime Constant Pool(문자 상수, 타입, 필드에 대한 레퍼런스가 저장됨), static 변수, final class 변수등이 생성되는 영역. 힙 영역 new 키워드로 생성된 객체와 배열이 저장되는 영역. String constant pool : 문자열 리터럴을 저장하는 공간 (String str = “abc” 에서 “abc” 부분) 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역. 스택 영역 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값등이 생성되…

트랜잭션 격리레벨, 락, 전파타입 정리

1. 트랜잭션 하나의 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것. 2. 트랜잭션의 성질 ACID 원자성(Atomicity) - 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패해야한다. 일관성(Counsistency) - 일관성 있는 데이터베이스 상태를 유지해야 한다. (무결성 제약 조건 만족) 격리성(Isolation) - 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 지속성(Durability) - 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 3. 트랜잭션 격리레벨 트랜잭션은 원자성, 일관성, 지속성을 보장한다 문제는 격리성 - 격리성을 완벽히 보장하려면 거의 차례대로 실행해야 하는데 이러면 동시성 처리 성능이 매우 나빠진다. ANSI 표준은 트랜잭션 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITED(커밋되지 않은 읽기) READ COMMITED(커밋된 읽기…

post-receive를 활용한 젠킨스 CI (github없이 CI하기)

github, gitlab등의 웹호스팅 기반 서비스를 사용한다면 젠킨스와 연동하기 쉬운데요. 여러가지 이유로 설치형 git을 사용해야만 하는 경우 CI를 어떤식으로 진행하는지 정리해봤습니다. 세 줄 요약 젠킨스 빌드를 원격으로 유발하는 URL 설정 git이 설치된 서버에 post-receive git hooks 설정 post-receive script 코드에 1번 URL을 연결 1. 젠킨스 설치 docker등의 가상환경에서 구축하는 방법도 있지만 지금은 windows 환경에서 설치해보겠습니다. 1.1 설치파일 다운로드 https://www.jenkins.io/ 에서 설치파일을 다운로드합니다. port를 설정합니다. 이번에는 1234로 설정하겠습니다. JDK 설정을 해줘야하는데 공식사이트를 잘 읽어보면 8과 11만 지원한다고 되어 있습니다. 나중에는 어떻게 바뀔지 모르니 공식 문서를 꼭 정독하시고 적절한 JDK 버전을 설정해주세요. localhost:1234에 접속해 보겠습니…

SpringBoot 공식문서 읽기 - 3. Using Spring Boot (2 / 2) - 스프링 빈과 의존성 주입, @SpringBootApplication 어노테이션, 어플리케이션 실행하기, Developer Tools, 어플리케이션 패키징

3. Using Spring Boot (2 / 2) 5. 스프링 빈과 의존성 주입 You are free to use any of the standard Spring Framework techniques to define your beans and their injected dependencies. We often find that using  (to find your beans) and using  (to do constructor injection) works well. If you structure your code as suggested above (locating your application class in a root package), you can add  without any arguments. All of your application components (, , ,  etc.) are automatically registered as Spring Beans. T…

SpringBoot 공식문서 읽기 - 2. Using Spring Boot (1 / 2) - 빌드 시스템, 코드 구성, 설정 클래스, 자동 설정

2. Using Spring Boot (1 / 2) 2.1. Using the “default” Package 1. 빌드 시스템 It is strongly recommended that you choose a build system that supports dependency management and that can consume artifacts published to the “Maven Central” repository. We would recommend that you choose Maven or Gradle. It is possible to get Spring Boot to work with other build systems (Ant, for example), but they are not particularly well supported. 종속성 관리를 지원하고 “Maven Central”저장소에 게시 된 아티팩트를 사용할 수있는 빌드 시스템을 선택하는 것이 좋습니다…

SpringBoot 공식문서 읽기 - 1. Getting Started

1. Getting Started what - introduction to Spring Boot with installation instructions how - building your first Spring Boot application why - discussing some core principles 1. introduction to Spring Boot with installation instructions Spring Boot helps you to create stand-alone, production-grade Spring-based Applications that you can run. We take an opinionated view of the Spring platform and third-party libraries, so that you can get started with minimum fuss. Most Spring Boot applications nee…

코틀린3 - 클래스, 객체, 인터페이스

4장. 클래스, 객체, 인터페이스 4.1 클래스 계층 정의 4.1.1 코틀린 인터페이스 코틀린 인터페이스 안에는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의할 수 있다. 다만 인터페이스에는 아무런 필드도 들어갈 수 없다. 이 인터페이스를 구현하려면 override 변경자 반드시 필요 디폴트 구현할 때 특별한 키워드 필요없이 그냥 구현하면 됨 다른 인터페이스가 showOff 메소드를 함께 구현하면?? 어느 쪽도 선택되지 않는다. 클래스가 구현하는 두 상위 인터페이스에 정의된 showOff구현을 대체할 오버라이딩 메소드를 직접 제공하지 않으면 다음과 같은 컴파일러 오류가 발생한다. 코틀린 컴파일러는 두 메소드를 아우르는 구현을 하위 클래스에 직접 구현하게 강제한다. 상속한 인터페이스의 메소드 구현 호출하기 이 클래스의 인스턴스를 만들고 showOff()가 구현대로 상속한 모든 메소드를 호출하는지 검증해볼 수 있다. Button 클래스는 Focusable 인터페이스 안에 선언된 se…

코틀린1 - 코틀린 기초

1장. 코틀린이란 더 적은 코드로 더 편하게 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것 안드로이드 공식언어 서버, 모바일, 웹, 프론트엔드까지 코틀린언어 하나로 작성가능 컴파일 과정 Kotlin Tutorials 코틀린 - *.kt -> 코틀린 컴파일러 -> *.class -> *.jar -> (코틀린 런타임)애플리케이션 자바 - *.java -> 자바 컴파일러 -> *.class -> *.jar -> 애플리케이션 코틀린 컴파일러로 컴파일한 코드는 코틀린 런타임 라이브러리에 의존 런타임 라이브러리에는 코틀린 자체 표준 라이브러리 클래스와 코틀린에서 자바 API의 기능을 확장한 내용이 들어있다. 코틀린으로 컴파일한 애플리케이션을 배포할 때는 런타임 라이브러리도 함께 배포해야 한다. 2장. 코틀린 기초 Hello World 함수를 최상위 수준에 정의할 수 있다! 꼭 클래스 안에 함수를 넣어야 할 필요가…

코틀린2 - 함수 정의와 호출,

3장. 함수 정의와 호출 컬렉션 만들기 to는 특별한 키워드가 아니라 일반함수다. (중위 호출 infix) (중요) 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 자바 코드와 상호작용하기 쉽다. 하지만 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있다. (자바에 없는) last와 max함수는 어디에 정의되어 있는걸까? 함수를 호출하기 쉽게 만들기 joinToString 구현하기 잘동작한다. 하지만 어떻게 하면 이 함수를 호출하는 문장을 덜 번잡하게 만들 수 있을까? 호출할 때마다 매번 네 인자를 모두 전달하는 것은 불필요하다. 이름 붙인 인자 함수 호출 부분의 가독성 개선 함수에 전달하는 인자 중 일부의 이름을 명시할 수 있다. 호;출 시 인자 중 어느 하나라도 이름을 명시하고 나면 혼동을 막기위해 그 뒤에 오는 모든 인자는 이름을 꼭 명시해야 한다. 디폴트 파라미터 값 이제 함수를 호출할 때 모든 인자를 쓸 수도 있고, 일부를 생략할 수도 있다. 최상위 함수와 프로퍼티 함수를…

SQL 튜닝

1장. SQL 처리 과정과 I/O SQL 파싱과 최적화 구조적, 집합적, 선언적 질의 언어 사용자 - SQL - 옵티마이저(DBMS 내부 엔진) - 실행계획(Execution Plan) - 프로시저 SQL 최적화 DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정 SQL 실행 전 최적화 과정 SQL 파싱 SQL 최적화 다양한 실행경로를 생성해서 가장 효율적인 하나를 선택 로우 소스 생성 실제 실행 가능한 코드 또는 프로시저 형태로 포맷팅 SQL 옵티마이저 최적의 데이터 액세스 경로를 선택해주는 DBMS의 핵심 엔진 옵티마이저의 최적화 단계 후보 실행계획 찾기 데이터 딕셔너리에 미리 수집해 둔 정보를 이용해 각 실행계획의 예상비용을 산정 최저 비용을 나타내는 실행계획을 선택 실행계획과 비용 SQL 옵티마이저가 생성한 처리절차를 사용자가 확인할 수 있게 트리 구조로 표현한 것 옵티마이저 힌트 옵티마이저는 네비게이션 - 네비 경로가 마음에 들지 않을 때 …

RealWorld Http 1

어려우면 쓰고 외우고 다시보자 이 책에서 배울 것 HTTP 프로토콜 기초 HTTP 발전과정 브라우저 내부에서 어떤 일이 일어나는가 서버와 브라우저가 어떻게 상호작용하는가 HTTP 기본요소 메서드와 경로 헤더 바디 스테이터스 코드 RFC 사양서를 현실에서 살펴보기 curl 사용법 go 언어 기본 사용법 curl을 프로그래밍 언어 코드로 바꾸는 방법 REST 아키텍처 구성 HTTP/1.0 (1996) HTTP/1.1 (1997) HTTP/2 (2005) 현대 HTTP의 기능을 이해한다. 그 이해를 돕기 위해 역사를 되돌아본다. HTTP의 역사 HTTP - 웹 브라우저와 웹 서버가 통신하는 절차와 형식을 규정한 것 웹 브라우저로 웹페이지를 표시할 때 서버로부터 정보를 받아오는 약속이지만, 그 범위를 넘어서 API등 다양한 서비스의 인터페이스로도 사용 고유명사 이름 설명 IETF (The Internet Engineering Task Force) RFC를 만든 단체 RFC (Request…

2020 카카오 - 괄호 변환

문제 설명 및 제한 조건 링크참고 - 프로그래머스 대략 1시간 사용 구현방법이 상세하게 적혀있어서 ‘어? 이렇게하면 풀린다고? 그렇구만… 왜지?’ 하면서 구현했다. [우아한테크세미나 - 190425 TDD 리팩토링 by 자바지기 박재성님 ](https://www.youtube.com/watch?v=bIeqAlmNRrA&t=2003s){:target=“_blank”} 에 나온대로 메서드를 최대한 나누려고 노력 지금은 깊이 2단계 까지는 보인다. 개선할 것 removeAndReverse 메서드를 앞과 뒤를 제거하는 것과 가운데 내용을 뒤집는 메서드로 쪼개는게 낫겠다. 과 를 비교하는 내용이 많이 등장하는데 실수를 방지하기 위해서 , 메서드를 만들어도 되겠다. balancedBracket 메서드의 가장 밑 은 논리적으로 실행될 수 없다. 균형잡힌 괄호의 index값을 리턴하게 하면 되려나… 고민해보자. 깊이 2인 메서드 1로 줄여보기 개선한 코드

2019년 9월

1번문제 물건과 박스배열이 주어질 때 박스에 넣을 수 있는 물건의 최대 갯수 구하기 2번문제 비숍의 위치 배열이 주어질 때 비숍이 갈 수 있는 곳을 제외한 체스판 위치의 갯수 구하기 비숍이 갈 수 있는 곳을 판단하는 판별식 구현에 1시간 가량 씀(dfs로 해야하나 한번에 풀 수 있는 식이 있나 고민하는 시간이 컸다) 여러개의 비숍이 위치할 때 중복을 제거하는 로직 추가가 필요할 것 같다. 이 문제에서는 boolean 배열 만들지 않아도 될 것 같다. 체스판의 위치가 필요한게 아니라 갯수만 리턴하면 되니까. 3번문제 남은 30분동안 못 풀고 끝났는데 dp를 공부하고나서 다시 푸니까 너무 빨리 풀려버림… 아쉽다 dp공부는 이 블로그를 참고 KHAN(광혁) - 백준 2579번 계단오르기 문제는 이 문제를 1차원 배열로 줄여놓은 것 백준 9465번 - 스티커 난이도가 높지 않았는데 시간내에 못풀어서 아쉬움이 크다. 그래도 이 정도로 성장했구나 확인할 수 있었던 시간이었다.

LV2. 큰 수 만들기

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 maxIndex를 -1로 초기화 했다는게 너무 마음에 안든다. 참고 프로그래머스

LV2. 조이스틱

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 알파벳을 최소 이동거리로 치환하는 로직 오른쪽으로 계속 이동하면서 가는게 최소이동거리인지 오른쪽으로 갔다가 다시 왼쪽으로 백해서 가는게 최소이동 거리인지 판단해야함 테스트케이스 11 에서 한참 막혀서 확인해보니 “AAABAAA” 가 4 인경우를 생각 안했음. 필요한 변수가 총 4개 였음… 더 줄일 수 있을 것 같은데… 참고 프로그래머스

LV2. 타겟넘버

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 손으로 푼 내용을 어떻게 구현해야할지 모르겠어서 재귀함수 응용법 공부(프로그래머스 - 영리한 프로그래밍을 위한 알고리즘) 3번째 인자에 하나는 +, 하나는 -를 넣으면 된다는 생각을 하는게 어려웠다. 참고 프로그래머스

LV2. 소수만들기

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 재귀함수 사용해서 경우의 수 조합(Combination) 배열의 합을 리스트로 담아놓고 소수 판별 후 카운트 소수 판별 시간복잡도 줄이기(에라토스테네스의 체) 참고 프로그래머스

LV2. 카펫

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 후기 규칙성 찾기 2차방정식 나옴 근의공식사용 중학교 수학을 지금 쓸 줄은 몰랐다… 완전탐색으로 푸는 방법은 모르겠다. 참고 프로그래머스

LV2. 쇠막대기

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 다른 사람의 풀이 배운점 나는 시작과 끝 index를 구한다음 그 안에 있는 레이저의 갯수를 구하는 방법밖에 생각이 안남… 그러다보니 시간복잡도는 O(n2)에다가 매번 arr을 넘겨주고 있어서 굉장히 비효율적이다. 다른사람의 풀이를 보면 레이저를 만날 때 왼쪽 막대기의 갯수를 더해간다. O(n)으로 끝남. split이나 charArray로 안바꾸고 시작해도 된다. 참고 프로그래머스

LV2. 가장 큰 수

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 참고 프로그래머스

LV2. 프린터

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 참고 프로그래머스

LV2. H-Index

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 참고 프로그래머스

LV1. K번째 수

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 참고 프로그래머스

LV3. 베스트앨범

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 참고 프로그래머스

LV2. 전화번호 목록

문제 설명 및 제한 조건 링크참고 - 프로그래머스{: target=“_blank”} Google 새창에서 열려랴 얍 내 풀이 참고 프로그래머스

LV2. 기능개발

문제 설명 및 제한 조건 링크참고 - 프로그래머스 내 풀이 개선해야할 게 많다… 참고 프로그래머스

LV1. 완주하지 못한 선수

문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한 조건 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion return [“leo”, “kiki”, “eden”] [“eden”, “kiki”] “leo” [“leo”, “kiki”, “leo”] [“leo”, “kiki”] “leo” [“leo”, “kiki”, “leo…

LV2. 위장

문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한 조건 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothes의 모든 원소는 문자열로 이루어져 있습니다. 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 ’_’ * 로만 이루어져 있습니다. 스파이는 하루에 최소 한…

LV2. 스킬트리

문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 제한 조건 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다. 스킬 순서와 스킬트리는 문자열로 표기합니다. 예를 들어, C → B → D 라면 CBD로 표기합…

코딩테스트 기록

거스름돈 노가다로 품. 자바의 정석에 있는 문제인데 생각이 안나고 시간도 없어서 ㅠㅠ 개선해보자 int형 배열을 선언하고 거스름돈의 단위를 넣은 다음 배열의 값을 하나씩 꺼내면서 money 를 값으로 나눈 값을 차례대로 출력하고 money에 그 동전 단위로 나눈 나머지값으로 재설정해준다. 369 박수 친 횟수 세기 13을 입력받으면 1부터 13까지 연속되는 숫자를 스트링으로 다 몰아넣고 그 중에서 3, 6, 9가 몇개인지 셈 string -> char로 바꾸는 과정 없이도 풀 수 있을 것 같음 암호풀기 abccbd 라는 암호가 있으면 (cc가 인접해 있으니) abbd로 바뀌고 (다시 bb가 인접해 있으니) 결국 ad가 최종 결과가 되는 암호풀기 ArrayList를 스택처럼 사용하고 String으로 옮김 청개구리 알파벳 A는 Z로, Z는 A로 바뀜 a는 z로, z는 a로 바뀜 대문자, 소문자별 유니코드 찾아보고 z,Z 보다 1큰 숫자에서 자기자신의 유니코드를 뺌 대문자, 소문자를 한…

LV2. 탑

문제 설명 수평 직선에 탑 N대를 세웠습니다. 모든 탑의 꼭대기에는 신호를 송/수신하는 장치를 설치했습니다. 발사한 신호는 신호를 보낸 탑보다 높은 탑에서만 수신합니다. 또한, 한 번 수신된 신호는 다른 탑으로 송신되지 않습니다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 탑이 왼쪽으로 동시에 레이저 신호를 발사합니다. 그러면, 탑은 다음과 같이 신호를 주고받습니다. 높이가 4인 다섯 번째 탑에서 발사한 신호는 높이가 7인 네 번째 탑이 수신하고, 높이가 7인 네 번째 탑의 신호는 높이가 9인 두 번째 탑이, 높이가 5인 세 번째 탑의 신호도 높이가 9인 두 번째 탑이 수신합니다. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 레이저 신호는 어떤 탑에서도 수신할 수 없습니다. 맨 왼쪽부터 순서대로 탑의 높이를 담은 배열 heights가 매개변수로 주어질 때 각 탑이 쏜 신호를 어느 탑에서 받았는지 기록한 배열을 return 하도록 solution 함수를 작성해주…

LV1. 잃어버린 체육복 (탐욕법)

문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요. 제한 조건 전체 학생의 수는 2명 이상 30명 이하입니다. 체육복을 도난당한 학생의 수는 2명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌의 체육복을 가져온 …

LV1. 문자열 내림차순으로 배치하기

문제 설명 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 조건 str은 길이 1 이상인 문자열입니다. 입출력 예 s return “Zbcdefg” “gfedcbZ” 풀이 참고 프로그래머스

LV1. 나누어 떨어지는 숫자 배열

문제 설명 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. 제한 조건 arr은 자연수를 담은 배열입니다. 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다. divisor는 자연수입니다. array는 길이 1 이상인 배열입니다. 입출력 예 arr divisor return [5,9,7,10] 5 [5,10] [2,36,1,3] 1 [1,2,3,36] [3,2,6] 10 [-1] 풀이 참고 프로그래머스

LV1. 자릿수 더하기

문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한 조건 N의 범위 : 100,000,000 이하의 자연수 입출력 예 N return 123 6 987 24 풀이 참고 프로그래머스

MYSQL - 프로젝트 검색 쿼리 마이바티스로 변경

SearchCriteria searchMapper.xml 참고자료 mybatis.org - 동적SQL if, foreach, bind

MYSQL - 프로젝트 검색 쿼리 완성

감격스럽다 출력된 데이터 이후에 할 일 확인 위의 주석에서 을 적어놓은 것은 checkbox 에서 데이터를 넘길 때 여러개를 선택한 경우 이런식으로 넘어가는데 컨트롤러 혹은 마이바티스에서 선택한 개수가 4개라는 것을 알 수 있는지 확인해야 한다 선택 사실 완전한 완성은 아니다. 키워드 검색이 들어 있지는 않기 때문인데, 여러가지 고려사항이 남아있다. 예를들어 키워드 검색에 강남을 입력 했을 때 우주 처럼 지도가 강남으로 포커스되고 그 지도안에 들어있는 모든 게스트하우스를 밑에 나타내게 하고 싶었던 것인데 위의 쿼리문에 추가할 경우 DB로 날려서 새로고침 되어야 하기 때문 애초에 우주와 여기어때를 둘 다 참고해서 UI가 섞인게 원인 우주처럼 나타내는 것을 포기하고 쿼리문에 추가할 것인지 키워드 검색의 위치를 바꾸고 ajax 요청으로 처리할 것인지 선택해야한다 성능 일단 꾸역꾸역 만들기는 했는데 인덱스를 사용한 것도아니고 (들어만 보고 아직 이해를 잘 못하기도 했다) 이것저것 생…

MYSQL - searchview 생성까지의 과정 정리

까먹을까봐

SpringBoot devtools 설정

pom.xml application.properties spring.devtools.livereload.enabled=true view단이 바뀌었을 때 자동으로 리로드 설정 spring.devtools.restart.enabled=false 컨트롤러, 모델단이 바뀌었을 때 프로젝트 재시작 설정 (정확히는 classpath에 있는 모든 파일) 개인적으로 요걸 true로 해놓으면 너무 시도때도 없이 프로젝트가 재시작 되어서 false로 설정해 놓았다 이클립스의 경우 project -> build automatically 설정 IntelliJ의 경우 여기참고{:target=“blank”}

SpringBoot 2.1.2 - MyBatis - MySQL - maven 설정

순서 springboot 프로젝트 생성 pom.xml 확인 Dto 작성 DAO(Mapper) Interface 작성 Mapper.xml 작성 application.properties 작성 Controller 작성 thymeleaf를 이용해 view에 출력 springboot 프로젝트 생성 Spring Initializr Maven Project Java 2.1.2 dependencies - web, mysql, mybatis, thymeleaf 선택 pom.xml dependency 확인 mysql connector의 scope 제거 Dto 작성 DAO(Mapper) Interface 작성 Mapper 어노테이션 참고 Mapper.xml 작성 src/main/resources 에 mapper 폴더 만들고 MapMapper.xml 생성 application.properties 작성 mysql mapper.xml 을 위한 properties 작성 Controller 작성 thymele…

MYSQL - 날짜&인원을 동시에 검색하는 경우 문제해결 (게스트하우스 프로젝트)

문제 스토리보드 확인 작성중인 ERD 확인 Input 날짜&인원을 선택하고 검색버튼을 누른다 등의 데이터가 넘어간다 Output 조건에 맞는 게스트하우스를 출력한다 조건 : 게스트하우스가 가지고 있는 방 중에서 하나라도 2019년 1월 1일부터 3일까지 3일동안 4명의 예약가능한 자리가 남아있어야 한다 조건에 맞게 검색하기 위해서는 검색한 날짜별로 모든 방의 최대수용인원과 이미예약한 인원을 뺀 값을 계산해야 하는데 어떻게 해야하는지 감이 전혀 오지 않았다. 결국 커뮤니티에 질문을…(구루비, Okky, 코드초보스터디카페) 해결 구루비 질문내용과 마농님의 답변 참고 해결방법 달력 테이블 만들기 참고 샘플 테이블, 데이터 넣기 (회원, 게스트하우스, 방, 예약정보 테이블) Oracle 답변을 MySQL로 수정 이후의 과제 사용한 MySQL 쿼리문 전부 해석하고 이해하기 더 사용된 테이블 erd에 추가 이 쿼리 사용해서 나온 방을 하나라도 가지고 있는 게스트하우스를 출력시키기

리눅스 CentOS7에 MySQL 5.7 설치하기

순서 MySQL 5.7 설치 UTF-8 (한글) 설정 MySQL 구동 MySQL 5.7 설치 정광섭님 블로그 - CentOS에 MySQL 5.7 설치하기 모든 패키지가 포함된 bundle 다운로드 번들 압축 해제 yum으로 설치 MySQL 5.7 이제 yum 명령어로 mysql 을 설치할 수 있다 명령어로 전체 패키지 목록을 확인 아래의 패키지를 모두 설치하는 명령어 mysql-community-server mysql-community-client mysql-community-libs mysql-community-common UTF-8 (한글) 설정 Confluence-MySQL 기본 인코딩을 UTF8 로 변경 /etc/my.cnf 파일 수정 아래의 내용 추가하고 저장 MySQL 구동 root 암호, 보안설정 위해 mysql_secure_installation 실행 다음 명령어로 초기 암호 획득

Spring - MyBatis - MySQL 연결하기

목차 dependency 설정 root-context.xml 설정 MVC 프로젝트 파일 만들기 들어가기 전에 프로젝트 이름 : mboard 패키지 이름 : com.mboard.bbs 한글설정(web.xml & jsp) dependency 설정 mybatis 3.4.1 mybatis-spring 1.3.0 mysql-connector-java 6.0.6 spring-jdbc 4.3.8RELEASE root-context.xml 설정 네임스페이스 추가 : aop, beans, context, jdbc, mybatis-spring MySQL DataSource 설정, Mapper 인터페이스를 빈객체로 등록 참고 db이름 : mbbsprac ip&port : 127.0.0.1:3306 username : mbbsuser password : 1234 table명 : tbl_board MVC 프로젝트 파일 만들기 controller BoardService BoardServiceImpl …

리눅스 CentOS7 서버 세팅 정리 (아파치 톰캣)

순서 CentOS 설치 톰캣 설치 JDK 설치 환경변수 설정 톰캣 실행 및 테스트 서비스 등록 서비스 관리 CentOS 설치 USB 만들기 wikidocs 리눅스 개발 놀이터 만들기 - 설치 USB 만들기 CentOS usb 부팅 BIOS Configuration 들어가기(메인보드마다 다른데 삼성은 F2) Boot Boot Device Priority Boot Option #1 -> usb이름 Save and Reset (F10) 기본 설정 DATE & TIME -> Asia Seoul Software selection -> GNOME Desktop Network & Host name -> ON Installation destination 설치할 디스크 선택 Other Storage Options -> I will configure partitioning 기존에 설치된 OS가 있다면 - 버튼으로 삭제 Click here to create them automatically Begi…

스프링 게시판 스터디 10 - Service 객체 생성

참고 네이버블로그 - 꿈꾸는 개발자 이 블로그의 첫번째 사진을 보시면 Controller와 DAO 사이에 Service라는 객체가 끼어 있습니다. Controller가 무거워지는 것을 방지하기 위해, 여러개의 매퍼가 있는경우 의미가 명확한 것 끼리 나누기 위해 Service객체를 사용하는 것 같은데 아직 감은 안잡히네요. 일단 설정하는 법만 공유하겠습니다. 10-1 패키지 - 파일 생성 com.javalec.bbs_prac.service 패키지 BoardService 인터페이스 BoardServiceImpl 클래스 (서비스) 10-2 BoardService 인터페이스 설정 10-3 BoardServiceImpl 서비스 클래스 설정 10-4 BController 변경 위에서 @Service(“boardService”) 부분과 연결됩니다 sqlSession대신에 Service객체를 Autowired 해서 사용합니다 10-5 root-context.xml 에서 IDAO 빈객체로 등록 다…

스프링 게시판 스터디 9 - 조회수 기능 추가하기

게시글을 클릭했다가 다시 목록으로 돌아왔을 때 조회수가 하나씩 증가해야 하는데, 깜빡했네요. 기능을 추가해볼게요. 9-1 Controller 수정 9-2 IDao 수성 8-3 IDao.xml (Mapper) 작성 확인해보자.

스프링 게시판 스터디 1 - DB세팅하기

1-1 DB 설정 sql command line 실행 명령문 system 계정 로그인 create user(아이디: bbsprac, 비번:1234) 권한 주기 system 계정 로그아웃 후 새로 생성한 user로 로그인 2-2 DB 만들기 SQL developer 실행 새접속(+ 버튼) 클릭 접속이름 bbsprac 사용자 이름 bbsprac 비번 1234 접속 클릭 워크시트 접속후 다음의 쿼리 실행 설명 bId 게시판 아이디 bUsername 유저 아이디 bTitle 게시판 제목 bContent 게시판 내용 bDate 글쓴 날짜 bCount 조회수 블스 강의에서는 계층형 게시판을 만드는데 저희는 최대한 단순화해서 만들어 볼게요 시퀀스 만들기 bId의 경우에는 게시글이 하나 생성될때마다 자동으로 1씩 늘어나야 됩니다. 이걸 AutoIncrement라고 부르는데, 오라클의 경우는 이 기능을 쓰려면 시퀀스를 만들어야 합니다 보통 테이블이름_seq 로 이름 짓는 것 같아요. 시퀀스 이용해…

스프링 게시판 스터디 5 - Delete 구현하기

항상 /list 타이핑 해주기 귀찮으니까 home.jsp를 살짝 바꿔주자 home.jsp list.jsp에서 Delete 부분 살펴보기 5-1 Controller Delete 작성 5-2 IDao 작성 5-3 IDao.xml (Mapper) 작성 확인해보자.

스프링 게시판 스터디 4 - List 구현하기

패키지 - 파일 만들기 com.javalec.bbs_prac HomeController.java com.javalec.bbs_prac.controller BController.java com.javalec.bbs_prac.dao IDao.java (인터페이스) com.javalec.bbs_prac.dao.mapper IDao.xml com.javalec.bbs_prac.dto BDto.java 4-1 DAO 설정 4-2 Mapper 설정 IDao.xml 4-3 Controller 설정 BController 컨트롤러의 흐름을 전체적으로 이해하는 것이 필요합니다 Controller에서 DB조작 후 리턴 -> model에 담아서 -> 뷰로 보내줌 4-4 View 만들기 list.jsp 4-5 BDto 설정 DB 컬럼 값과 멤버변수의 이름을 갖게 만들어줍니다. 기본 생성자, 초기화 생성자, Setter & Getter, toString 오버라이딩 해줍니다 실행했을 때 데이터베이스에 있는 …

스프링 게시판 스터디 2 - 프로젝트 생성 + 한글처리

2-1 스프링 프로젝트 생성 이클립스 실행 new-spring legacy project 클릭 - Spring MVC Project 선택 Project name: bbs_prac package name: com.javalec.bbs_prac 프로젝트 이름과 패키지 이름은 아무렇게나 적어도 되는데, 강의랑 비슷하게 사용해볼게요. 나중에는 이 이름도 생각해 봐야겠어요. 2-2 한글처리 src - main - webapp - web-inf - web.xml 파일에 한글 처리 설정을 추가해줍니다

스프링 게시판 스터디 3 - 마이바티스 (Mybatis) 설정하기

3-1 pom.xml에 Dependency 추가 pom.xml - Dependencies 탭 클릭 Add 클릭 jdbc 검색 -> spring-jdbc 4.1.4RELEASE[jar] 선택 mybatis 검색 -> org.mybatis mybatis 3.2.8[jar] 선택 다시 mybatis 검색 -> mybatis-spring 1.2.2.[jar] 선택 저장하기 버전별 차이는 잘 몰라요. 안전하게 최신말고 이전 버전으로… 참고) 수업시간에 mvnrepository 들어가서 설정했던 거랑 똑같습니다. 3-2 root-context.xml 설정 어떤 DB를 선택해서 연결할거냐를 설정해줘야 합니다. 유튜브 강의에서는 servlet-context.xml에서 설정하는데, 구글링 해보니까 root-context.xml에 설정하는게 일반적인 것 같아요. 네임스페이스 탭 클릭 -> aop, beans, context, jdbc, mybatis-spring 클릭 Source 탭으로 돌아와서 다…

스프링 게시판 스터디 6 - Write 구현하기

Write_view : 글을 작성할 수 있는 Form 이 있는 공간 Write : Write_view에서 작성한 글이 DB에 저장되는 공간 6-1 Controller 작성 6-2 IDao 작성 6-3 IDao.xml (Mapper) 작성 6-4 write_view.jsp 작성 확인해보자.

스프링 게시판 스터디 7 - View 구현하기

7-1 Controller 작성 7-2 IDao 작성 7-3 IDao.xml (Mapper) 작성 7-4 content_view.jsp 작성 확인해보자.

스프링 게시판 스터디 8 - Update 구현하기

update_view : update form이 있는 곳 update : update form 에서 수정한 내용이 DB에 적용 8-1 Controller 작성 8-2 IDao 작성 8-3 IDao.xml (Mapper) 작성 8-4 update_view.jsp 작성 확인해보자.

스프링 12강 - 컨트롤러 클래스 제작

소스코드 다운받기 12-1 컨트롤러 클래스 제작 클래스 제작 순서 @Controller를 이용한 클래스 생성 @RequestMapping을 이용한 요청 경로 지정 요청 처리 메서드 구현 뷰 이름 리턴 12-2 요청 처리 메서드 제작 뷰페이지 이름 생성방법 prefix + 요청처리 메서드 반환값 + suffix 12-3 뷰에 데이터 전달 뷰에서는 el 문법으로 전달받은 데이터를 사용가능 참고자료 스프링과정12강 블스(김명호 강사)

스프링 14강 - @RequestMapping 파라미터

소스코드 다운받기 14-1 Get 방식과 Post 방식 14-2 @ModelAttribute @ModelAttribute 어노테이션을 이용하면 커맨드 객체의 이름을 개발자가 변경 할 수 있다. (잘 사용 될지는..?) 뷰에서는 으로 사용 뷰에서는 으로 사용 14-3 리다이렉트(redirect:) 키워드 다른페이지로 이동할 때 사용 참고자료 스프링과정14강 블스(김명호 강사)

스프링 15강 - 폼 데이터 값 검증

소스코드 다운받기 폼 데이터 검증은 클라이언트 쪽에서 유효성검사하는 편이 서버에 부담을 주지 않기 때문에 더 바람직한 방법이다. 이 강의는 참고용으로 알아 두자 15-1 Validator를 이용한 검증 Validator 인터페이스를 구현한 클래스 생성 validate() 메서드 사용 15-2 ValidationUtils 클래스 validate()메서드를 편리하게 사용 할 수 있도록 고안된 클래스 15-3 @Valid와 @InitBinder 의존 추가 @Valid 추가 @InitBinder 추가 참고자료 스프링과정15강 블스(김명호 강사)

스프링 13강 - 컨트롤러에서 데이터 받기 (getParameter)

소스코드 다운받기 13-1 HttpServletRequest 클래스 13-2 @RequestParam 어노테이션 (잘 안쓸듯) 13-3 데이터(커맨드) 객체 코드 양이 적어서 많이 사용된다 Member 클래스 생성 (setter 생성) 뷰에서 사용할 때는 와 같이 사용 13-4 @PathVariable PathVariable 어노테이션을 이용하면 경로에 변수를 넣어 요청메서드에서 파라미터로 이용 할 수 있다 게시판에서 Read 부분 만들 때 이 방식을 이용할 것 같다. /bbs/1 -> 1번글 보기 /bbs/10 -> 10번글 보기 참고자료 스프링과정13강 블스(김명호 강사)

스프링 16강 - 스프링 MVC 계층형 게시판 (1/5) with 오라클

소스코드 다운받기 16-1 DB 설정 오라클 설치 sql command line 실행 명령문 system 계정 로그인 create user(아이디: jonny, 비번:1234) 권한 주기 system 계정 로그아웃 후 새로 생성한 user로 로그인 16-2 DB 만들기 SQL developer 실행 새접속(+ 버튼) 클릭 접속이름 jonny 사용자 이름 jonny 비번 1234 접속 클릭 워크시트 접속후 다음의 쿼리 실행 설명 bId - 게시글 id bName - 게시판 이름 bTitle - 게시글 제목 bContent - 게시글 내용 bDate - 게시글 작성일 bHit - 게시글 확인 수 bGroup - n번 글에 관련된 모든 게시글, 답변, 재답변 1번글, 1번글의 답변, 1번글의 답변의 답변 모두 bGroup은 1 bStep - 원 게시글에서 몇번째 떨어진 글인가? 첫번 째 답변은 bStep 1, 두번 째 답변은 bStep 2 bIndent - 몇번째 들여쓰기한 게시글인가?…

스프링 19강 - 스프링 MVC 계층형 게시판 (4/5) with 오라클

소스코드 다운받기 지금은 Spring JDBC, MyBatis를 전혀쓰지 않고 JDBC만 이용해서 진행하고 있다. 중복되는 것이 많고 귀찮다~ 라고 느끼고 있으면 잘하고 있는 것. 19-1 글 수정 페이지 만들기 BController 작성 BModifyCommand 작성 DAO 작성 19-2 글 삭제 페이지 만들기 BController 작성 BDeleteCommand 작성 DAO 참고자료 스프링과정19강 블스(김명호 강사)

스프링 18강 - 스프링 MVC 계층형 게시판 (3/5) with 오라클

소스코드 다운받기 context.xml에 추가하기 18-0 list 페이지 만들기 DAO 설정 생성자 만들기. 데이터 소스를 구함 list 메서드에서 sql 질의 list.jsp 만들기 지금 중요한 내용이 아니니 복붙 18-1 글 작성 페이지 만들기 Bcontroller.class 설정 BWriteCommand.class 설정 BDao.java 설정 write_view.jsp 18-2 글 내용 페이지 만들기 BController 작성 BContentCommand 작성 BDao - contentView 작성 참고자료 스프링과정18강 블스(김명호 강사)

스프링 17강 - 스프링 MVC 계층형 게시판 (2/5) with 오라클

소스코드 다운받기 17-1 패키지, 인터페이스, 클래스 제작 BController 클라이언트 요청(url)에 따라 전체적인 작업을 지휘 BCommand (인터페이스) BContentCommand : 게시글 내용보기 BDeleteCommand : 삭제하기 BListCommand : 게시글 리스트 BModifyCommand : 수정하기 BReplyCommand : 답변하기 BReplyViewCommand : 답변보기 BWriteCommand : 글쓰기 BDao BDto 17-2 Controller 제작 17-3 리스트 페이지 만들기 BController.class -> BListCommand.class -> DAO DTO 참고자료 스프링과정17강 블스(김명호 강사)

스프링 20강 - 스프링 MVC 계층형 게시판 (5/5) with 오라클

소스코드 다운받기 20-1 글 답변 페이지 만들기 reply_view : 답변을 할 수 있는 Form이 있는 공간 reply : 실제 답변이 DB와 연동되어 처리되는 공간 BController 작성 BReplyViewCommand 작성 BReplyCommand 작성 BDao 작성 참고자료 스프링과정20강 블스(김명호 강사)

스프링 21강 - 스프링 JDBC를 이용해 반복코드 줄이기

소스코드 다운받기 21-1 Spring JDBC (JdbcTemplate) 이용한 반복코드 줄이기 드라이버 로드, 커넥션 생성 & DB 연결, SQL 실행, DB 연결 해제 부분은 매번 같은 동작을 반복한다 JDBC Template을 이용해서 이러한 작업들을 간단하게 처리 할 수 있다 21-2 Spring빈을 이용한 코드 간소화 Datasource빈이 들어있는 JdbcTemplate빈을 이용하면 DB관련 클래스들을 생성하고 조립할 수 있다 Dependency 추가(pom.xml) BController에 JdbcTemplate 추가 & Setter 만들기 & Autowired Constant.java 파일 만들기 스프링 설정파일에 Spring빈 추가(servlet-context.xml) dataSource 빈 추가 template 빈 추가 - dataSource를 포함하도록 21-3 JDBC를 이용한 리스트 목록 만들기 엄청 짧아졌다!! BDao의 list메서드 수정하기 드라이버 로…

스프링 10강 - AOP란? (2/2) @Aspect로 AOP 구현

소스코드 다운받기 10-1 @Aspect를 이용한 AOP 구현 의존 설정(pom.xml) @Aspect 어노테이션을 이용한 Aspect클래스 제작 @Pointcut 메서드를 만들어 사용하는 방법 @Pointcut 메서드를 만들지 않고 바로 적용하는 방법 XML파일에 설정 실행 결과 요약 10-2 AspectJ Pointcut 표현식 물론 같은 기능이 XML에도 있다 예제 9-2 ex2 를 참고해서 비교해보자 참고자료 스프링과정10강 블스(김명호 강사) 기억보단 기록을 - AOP 정리(3) 어느 개발자의 한적한 공간 - Spring AOP 흔한 개발자의 개발 노트 - AOP 설정하기

스프링 11강 - MVC 구조 살펴보기

소스코드 다운받기 명강의다 두고두고 계속 봐야겠다 11-1 스프링 MVC 구조 살펴보기 사용자가 `/ 으로시작하는 url을 요청하면 (모든 요청을 뜻한다) DispatcherServlet으로 보내라 사용자의 url에 따라 적절한 컨트롤러로 보낸다 컨트롤러에서 실행후 “home”을 리턴한다 리턴된 “home”은 servlet-context.xml으로 전달된다 servlet-context.xml에서는 com.javalec.spring_ex_pjt 패키지에 있는 파일을 스캔한다 컨트롤러에서 리턴받은 “home” 에 접두사 접미사를 붙여서 /WEB-INF/views/+뷰이름+.jsp 의 형태로 만들어준다 /WEB-INF/views/home.jsp로 연결된다 11-2 resources 폴더 이해하기 이미지를 넣을 때 경로 설정을 어떻게 해줘야 할까? story.png를 src/main/webapp/resources 폴더 안에 넣어준다 사용할 땐 resources/파일이름 resources …

스프링 9강 - AOP란? (1/2) XML로 AOP 구현

소스코드 다운받기 9-1 AOP(Aspenct Oriented Programming)란? 기억보단 기록을 - AOP 정리(3) 를 읽어보자 용어 Aspect: 공통 기능 Advice : Aspect의 기능 자체 Joinpoint : Advice를 적용해야 되는 부분 Pointcut : JoinPoint의 부분으로 실제로 Advice가 적용된 부분 (구멍) Weaving : Advice를 핵심 기능에 적용하는 행위 (꿰매기) 스프링에서는 proxy를 이용해서 AOP를 구현한다 Client(호출부) -> Proxy(대행) -> Target(핵심기능) 9-2 XML기반의 AOP구현 의존 설정(pom.xml) 공통 기능 클래스 제작 - Advice 역할 클래스 (Proxy) XML 설정 파일에 Aspect 설정 실행 결과 어디가 공통부분이고 어디가 핵심기능인지 구분해서 실행 결과를 살펴보자 9-3 Advice의 종류 : 메서드 실행 전에 advice 실행 : 정상적으로 메서드 실행 후…

스프링 8강 - 외부파일을 이용한 스프링 빈 설정

소스코드 다운받기 8-1 Environment 객체 Environment 객체를 이용해서 스프링 빈 설정 예제를 보면 xml파일에 객체를 초기화 하지 않고있는데 Main.java에서는 getAdminId() 등의 메서드를 사용하고 있다. 어디선가 초기화를 따로 해주고 있다는 얘기. AdminConnection 파일에 들어가보자. 지난시간에 배운 InitializingBean, DisposableBean 외에 EnvironmentAware 인터페이스가 구현되어 있다. EnvironmentAware setEnvironment() 메서드를 오버라이딩 해야한다 빈 객체가 초기화 되기도(InitializingBean) 전에 콜백함수로서 호출된다 8-2 프로퍼티 파일을 직접 이용한 설정 Environment 객체를 생성하지 않고 프로퍼티 파일을 직접 이용해서 스프링 빈을 설정할 수 있다 8-3 프로파일 속성을 이용한 설정 참고자료 스프링과정8강 블스(김명호 강사)

스프링 7강 - 스프링 생명주기와 빈 범위

소스코드 다운받기 7-1 스프링 컨테이너 생명 주기 스프링 컨테이너 생성 스프링 컨테이너 설정 스프링 컨테이너 사용 스프링 컨테이너 종료 7-2 스프링 빈 생명 주기 implements InitializingBean, DisposableBean InitializingBean 구현 afterPropertiesSet()을 오버라이딩한다 빈 초기화 과정에서 호출된다 ctx.refresh(); 할 때 호출 DisposableBean 구현 destroy()를 오버라이딩한다 빈 소멸과정에서 생성된다 ctx.close(); 할 때 생성 @PostConstruct, @PreDestroy @PostConstruct InitializingBean을 구현한 것과 같은 기능 빈 초기화 과정에서 호출 하고 싶은 메서드 위에 @PostConstruct annotation 추가 ctx.refresh(); 할 때 호출 @PreDestroy DisposableBean을 구현한 것과 같은 기능 빈 소멸 과정에서 …

스프링 1강 - 시작하기

1-1 프레임워크 1-2 스프링 프레임워크 1-3 설치 JDK JAVA 환경 변수 세팅 이클립스 EE 다운로드 마켓플레이스에서 STS 3.x 다운로드 웹컨테이너 톰캣 설치 참고자료 스프링과정1강 블스(김명호 강사)

스프링 2강 - DI(의존성 주입)와 IOC 컨테이너

2-1 STS 플러그인 설치 (3.x.x) STS 4 이상은 Spring legacy project가 없다. (스프링 부트만 존재) 2-2 스프링 프로젝트 만들기 new - Project - Spring legacy project - simple spring maven 선택 src/main/java 폴더에는 java class 파일들 src/main/resource 폴더에는 xml등 여러 자료들 소스코드는 자바와 동일 2-3 DI(Dependency Injection)와 IOC 컨테이너 요게 스프링의 핵심 DI 객체를 자바 내에서 생성하는 것이 아니라 외부에서(xml혹은 @Annotation)생성해서 주입 클래스 파일을 최대한 수정하지 않고 객체를 관리하기 쉽게 하기 위함 지금은 감이 안올 수 있지만 큰 규모의 프로젝트를 할 때 유리 (모를 때 Interface를 왜쓰지? 하는것 처럼) IOC 컨테이너 인터페이스를 통해 객체들을 여러개의 부품으로 만든다 IOC는 부품(객체)들을 담…

스프링 3강 - DI를 이용한 객체 생성과 조립

소스코드 다운받기 3-1 스프링을 이용한 객체 생성과 조립 DI 비교 DI를 활용하지 않은 코드 내가 필요한 객체를 내가 생성 DI를 활용한 코드 외부에서 객체를 생성하고 주입 참고자료 스프링과정3강 블스(김명호 강사)

스프링 4강 - DI 프로퍼티 설정과 컨테이너의 이해

소스코드 다운받기 4-1 스프링 프로퍼티 설정 전 시간에 자세한 주석을 바탕으로 이 코드를 이해해 보자 4-2 스프링 컨테이너 이해 참고자료 스프링과정4강 블스(김명호 강사)

스프링 6강 - DI 설정방법 두가지 (XML vs @Annotation)

소스코드 다운받기 6-1 XML파일을 이용한 DI 설정 방법 여태까지와 똑같다 예제 6-1 파일로 복습 6-2 JAVA 파일을 (@Annotation) 이용한 DI 설정 방법 예제 6-2는 xml파일이 없다 -> ApplicationConfig.java 가 대신 의존성을 주입하고 있다 @Configuration 이 클래스는 스프링 설정에 사용되는 클래스 입니다 라고 명시해 주는 어노테이션 @Bean Bean - 객체생성 생성자() 혹은 setter()를 이용해 설정 Main.java에서 student1과 student2는 같을까 다를까? 6-3과 6-4는 xml과 annotation을 같이 쓰는 예제이다. 가끔 쓰인다고 하니 한바퀴 돌고 나서 다시보자 참고자료 스프링과정6강블스(김명호 강사)

스프링 5강 - DI 의존 관계와 DI의 장점

소스코드 다운받기 5-1 의존 관계 (코드참고) StudentInfo 객체는 Student객체에 의존 하고 있다. 의존성을 주입하는 방법 두가지 XML파일 이용 JAVA annotation 이용 StudentInfo에서 의존받은 객체를 받는 방법 생성자(파라미터) 이용 생성자를 이용할 때는 xml파일에 를 이용한다 setter() 이용 (지금까지는 setter를 이용해왔다) 이용 5-2 DI의 장점 예제 5-2를 보면 pencil interface를 구현한 여러가지 굵기의 연필이 있다 (4B, 6B, 6B with eraser) xml파일에서 어느 클래스에서 받을지 정하면 Main.java 파일을 건드릴 필요없이 부품을 쉽게 바꿀 수 있다 참고자료 스프링과정5강블스(김명호 강사)

자바스크립트로 form 유효성검사하기

JS 호이스팅, 변수의 범위(scope), 클로저

호이스팅 변수나 함수의 선언이 해당 범위(scope)에서 최상단으로 옮겨지는 것 변수선언 부분이 아래와 같이 옮겨진다 변수의 범위 전역 변수의 선언은 window에 속한다(window는 브라우저를 의미) 지역 변수의 선언은 (블럭범위 없음) 지역변수 함수 전체에서 유효 함수호출을 해야 전역변수가 만들어짐 변수앞에 var를 꼭 쓰자 함수-유효성검사 호출시 인자가 생략될 수 있으므로 if문으로 확인 후 기본값을 넣어주자. 널 체크할 때는 undefined인지 먼저 확인하자.(undefined는 null이 아님) 함수-클로저 (1) 전역변수로 선언하면 변수이름이 충돌될 수 있고, 외부에서 접근 못하게 값을 보호할 필요가 있음. (2) 지역변수로 선언하면 변수가 보호되긴 하지만 매번 0으로 초기화 됨 (3) 변수를 지역변수로 하고, 내부함수로 변경. 내부함수라서 외부에서 호출 불가 (4) 내부함수를 반환하여, 외부에서 호출할 수 있도록 변경. (5) 콜백함수가 외부변수를 사용하면 의도와 …

SQL 시험

3,4,8,9번 문제 틀림 문제1. 각 부서별 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내는 SELECT문을 작성하시오 문제2. 각 직책(s_emp.title)별로 급여(s_emp.salary)의 총합을 구하되 직책이 사원인 사람은 제외하시오. 단, 급여총합이 3000이상인 직책만 나타내며, 급여 총합에 대한 내림차순으로 정렬하시오. 문제3. 직급(s_emp.title)이 ‘부장’(영업부장, 지부장 포함)인 사람이 2명 이하인 부서(s_emp.dept_id)가 몇개인지 나타내는 SELECT문을 작성하시오. 문제4. 담당직원(s_customer.sales_rep_id)이 배정되지 않은 고객(s_customer.name)을 모두 나타내는 select문을 작성하시오. 문제5. Primary Key와 Foreign Key에 대해서 아는대로 적으시오. Primary Key Foreign Key 각 행을 구별할 수 있는 컬럼(들) 다른 테이블의 Primary Key 컬럼 No…

SQL 문제풀기 3

임시 저장

(프로그래머스 모의테스트) 배열 중복

[문제] 길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다. 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요. 제한 조건 배열의 길이는 10만 이하입니다. 배열의 원소는 0 이상 10만 이하인 정수입니다. 입출력 예 arr result [4, 1, 3, 2] true [4, 1, 3] false 입출력 예 설명 입출력 예 #1 입력이 [4, 1, 3, 2]가 주어진 경우, 배열의 길이가 4이므로 배열에는 1부터 4까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3, 2]에는 1부터 4까지의 숫자가 모두 들어 있으므로 true를 반환하면 됩니다. 입출력 예 #2 [4, 1, 3]이 주어진 경우, 배열의 길이가 3이므로 배열에는 1부터 3까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3]에는 2가 없고 4가 있으므로 false를 반환하면 됩니다…

(참고) 오라클 SQL 세팅하기(SQL developer + Oracle DB 11g Express)

설치하기 Oracle Database 11g Express Edition 설치 및 사용 방법 오라클 SQL Developer 설치 및 접속하는 방법 DBMS 접속하기 사용자 계정 생성 student 계정에 권한 주기 student계정은 CREATE SESSION권한이 없어서 접근불가 system계정으로 student계정에게 connect, resource권한을 줘야한다. SQL Developer에서 student계정 접속 +버튼(새로만들기/데이터베이스 접속 선택) 누르기 세부사항 입력 테스트 버튼 누르고 성공여부 확인 테스트 성공하면 접속버튼 누르기 CREATE로 테이블 생성해보기 아래의 표를 보고 테이블을 생성하시오.

SQL 문제풀기

GROUP BY와 HAVING 절 문제 1 각 부서(dept_id)별 평균 급여를 계산해서 보여주시오. 문제 2 각 부서(dept_id)별로 직책이 사원인 직원들의 평균 급여를 계산해서 보여주시오. 문제 3 HAVING 각 부서별로 평균 급여를 구하되 평균 급여가 2000이상인 부서만 나타내시오 having : 그룹에 대한 조건은 where절이 아니라 having절에서 기술한다. 문제 4 각 직책(title)별로 급여의 총합을 구하되 직책이 부장이 사람은 제외하시오 단, 급여총합이 8000(만원) 이상인 직책만 나타내며, 급여 총합에 대한 오름차순으로 정렬하시오. 문제 5 SUBGROUP 각 부서내에서 각 직책별로 몇 명의 인원이 있는지를 나타내시오. 문제 6 각 부서별로 급여의 최소값과 최대값을 나타내시오. 단, 최소값과 최대값이 같은 부서는 출력하지 마시오. 참고자료 (예제로 배우는 ORACLE 11g)[https://wikidocs.net/3901]

SQL 문제풀기 2

6.4 직원과 부서테이블을 join하여 사원의 이름과 부서, 부서명을 나타내시오 6.5 alias 사용 6.5 서울 지역에 근무하는 사원에 대해 각 사원의 이름과 근무하는 부서명을 나타내시오 6.6 non-equijoin 각 사원의 이름과 급여등급을 나타내시오 6.7 outer join 이름, 사번, 담당고객 이름. 단, 고객에 대하여 담당영업사원이 없더라도 모든 고객의 이름을 나타내고, 사번순으로 오름차순 정렬 6.8 self join 6.8 self join 직원중에 ‘김정미’와 같은 직책을 가지는 사원의 이름과 직책, 급여, 부서번호를 나타내시오 6.11 set 연산자 from절에서의 subquery 7.7 having 절에서의 subquery 7.7 having 절에서의 가장 적은 평균급여를 받는 직책에 대해 그 직책과 평균급여를 나타내시오. (*****) 7.8 create 절에서의 subquery 컬럼 사이즈 변경 s_emp 테이블의 mailid 길이는 8로 설정되어 있…

java 객체지향 개념 시험

문제 1 객체지향 개념의 4가지 특징을 적으시오. 캡슐화 상속 다형성 추상화 문제 2 생성자를 작성할 때 지켜야 하는 조건을 적으시오. 클래스 이름과 똑같아야 함 리턴 x, void x 모든 클래스에 반드시 1개의 생성자 존재해야 함 반드시 첫줄에 다른 생성자 호출 (this()) 문제 3 오버라이딩할 때 지켜야할 3가지 조건을 적으시오. 선언부 동일 제어자 좁은쪽으로 변경 x 조상보다 많은 예외선언 x 문제 4 오버로딩할 때 지켜야하는 3가지 조건을 적으시오. 메서드 이름 같아야 함 매개변수 갯수 or 타입 달라야 함 리턴타입 상관 x 문제 5 다형성의 장점 2가지를 적으시오. 조상 참조변수를 매개변수로 다루면 자손 클래스 메서드 사용가능 하나의 배열 안에 여라 타입 자손 객체 다룰 수 있음 문제 6 static메서드가 같은 클래스의 인스턴스 변수를 사용할 수 없는 이유에 대해 적으시오. 인스턴스 변수는 인스턴스 생성시 사용가능 But Static 메서드 호출되었을 때 인스턴스 …

java MyVector 메서드 만들기 시험

컬렉션 프레임워크에서 Vector(ArrayList의 구버전) 내부 메서드가 어떻게 동작하는지 시험을 봤다. 시험 문제와 답을 정리했다. 문제 1 Object배열 objArr을 인스턴스 변수로 갖는 MyVector클래스를 선언하시오. 문제 2 MyVector클래스에 생성자 MyVector(int capacity)와 기본 생성자(capacity=16)를 추가하시오. 문제 3 MyVector클래스에 객체배열에 저장된 객체의 개수를 저장하기 위한 인스턴스 변수 size를 추가하고, 이 변수의 값을 반환하는 size()와 배열 objArr의 길이를 반환하는 capacity(), 그리고 객체배열이 비었는지 확인하는 boolean isEmpty()를 작성하시오. 문제 4 MyVector클래스의 객체배열 objArr에 객체를 추가하는 메서드 void add(Object obj)를 작성하시오. 배열은 길이를 조정하지 못하는 큰 단점을 가지고 있다. Vector는 이를 보완해서 배열 안에 객체가 …

java 지네릭스

지네릭? 뜻 ‘이름이 붙지않은’ -> 변수 타입을 미리 정하지 않은 것 특징 변수 타입을 클래스 밖에서 지정하는 것(메타몽 처럼 타입을 마음대로 정할 수 있다) 인스턴스 생성할 때 구체적인 타입 정한다(단, 참조타입만 사용가능) 장점 타입 안정성(Type safety)제공 타입체크 형변환 생략가능 사용법 지네릭 클래스 만들기 객체 생성시 타입지정 사용 컬렉션 프레임워크 + 지네릭스 컬렉션 프레임워크에서 ArrayList를 쓸 때 지네릭스와 함께 자주 사용한다 ArrayList는 모든 타입의 값을 저장할 수 있게 하기 위해서 Object 타입으로 저장된다. 따라서 출력할 때 매번 원래의 데이터 타입으로 형변환을 해줘야 하는데, 지네릭스를 사용하면 형변환 할 필요 없이 사용가능하다 와일드 카드 매개변수 타입을 지금 정하지 않겠다는 의미 위 두개의 코드가 모두 실행이 되려면 array 타입이 이어도, 여도 안된다. 자유롭게 사용하기 위해 와일드카드 사용 하지만 만 사용했을…

java 컬렉션 프레임워크

1. 컬렉션 프레임워크의 핵심 인터페이스 & 요약 컬렉션 : 데이터 그룹 프레임워크 : 표준화된 프로그래밍 방식 컬렉션 프레임워크 : 데이터 그룹을 저장하는 클래스들을 표준화한 설계 데이터를 다루는 데는 크게 3가지 타입이 존재한다. List : 순서O, 중복O ArrayList, LinkedList, Stack, Vector 등 Set : 순서X, 중복X HashSet, TreeSet 등 Map : Key와 Value의 쌍으로 이루어진 데이터집합. ex) 우편번호, Key는 중복X, Value는 중복O HashMap, TreeMap, Hashtable, Properties 등 요약 컬렉션 특징 ArrayList 배열기반. 순차적 추가삭제 빠름. 접근속도 빠름. 중간에 추가 삭제 느림. LinkedList 연결기반. 중간에 추가 삭제 빠름. 접근속도 느림. 순차적 추가삭제 상대적으로 느림. HashMap 배열과 연결이 결합된 상태. 추가, 삭제, 검색, 접근성 모두 뛰어남. 검색에…

java 객체지향 시험

문제 1. 두개의 정수 x, y를 저장하기 위한 인스턴스 변수가 선언된 Point클래스를 정의하시오 문제 2. 앞서 정의한 Point클래스를 테스트하기 위한 PointTest클래스를 작성하고, Point객체를 생성하는 코드를 작성하시오 문제 3. Point클래스에 toString()을 오버라이딩해서 x와 y의 값을 포함한 문자열을 반환하도록 하시오. PointTest클래스에서 Point객체를 생성한 다음, x와 y의 값을 3과 5로 초기화하시오. 그리고 toString()을 호출해서 x와 y의 값을 출력하시오. 문제 4. Point클래스에 x, y를 매개변수로 하는 생성자와 기본생성자(x, y를 모두 1로 초기화)를 추가하시오. 그 다음 PointTest클래스에서 테스트 하시오. 문제 5. Point클래스에 두 점 사이의 거리를 double타입의 값으로 계산해서 반환하는 getDistance(Point p)를 추가하시오. 문제 6. Point클래스에 두 점 사이의 거리를 doubl…

java 객체지향 한장정리 (2)

1. 상속 1) 상속이란? 기존의 클래스를 재사용해서 새로운 클래스를 작성 조상과 자손으로 관계맺음 자손은 조상의 모든 멤버 상속받음 사용법 2) 상속관계 공통부분 조상에서, 개별부분 자손에서 관리 3) 포함관계 한 클래스의 멤버 변수로 다른 클래스 선언 4) 단일상속 Java는 단일상속만을 허용 5) Object 클래스 조상없는 클래스는 object클래스 상속 2. 오버라이딩 1) 오버라이딩이란? 조상메서드를 자손에 맞게 변경(덮어쓰기) 2) 조건 선언부가 같아야 함 접근제어자 좁은 범위로 변경 x (public->private x) 조상보다 많은 수의 예외 x 내부만 변경 3) 오버로딩 vs 오버라이딩 오버로딩 새로운 메서드 정의(new) 상속과 관련 x 오버라이딩 상속받은 메서드의 내용변경(change) 4) super 참조변수 this vs super this: 인스턴스 자신의 참조변수 super: 조상의 참조변수 super() 조상의 생성자 자손 인스턴스 생성시, 자손+조…

java 객체지향 한장정리 (1)

1. 객체 변수 + 메서드의 집합 클래스라는 설계도로 만든 ‘인스턴스’ 2. 클래스와 객체 클래스 : 멤버변수 + 메서드로 이루어진 객체생성을 위한 ‘설계도’ 객체 : 클래스를 통해 만들어진 실체 ex) 클래스 - Tv설명서 / 객체 - Tv 객체 생성방법 3. 변수와 메서드 1) 변수 종류 iv는 인스턴스 생성시 생성된다(개별) cv는 메서드 내부에서만 사용가능 (초기화 필수) 2) 클래스변수와 인스턴스 변수 cv : 공유속성 iv : 개별속성 3) 메서드 재사용성, 중복코드제거 구조 : 선언부 + 구현부 특징 리턴값 없으면 void 반환값 반환타입 일치해야 함 4) JVM 메모리 구조 Method area : 클래스 정보 저장 Call stack : 메서드 실행시 차례로 실행 Heap : 인스턴스 생성시 저장 call stack 쌓인 순서와 반대로 실행 하나의 메서드만 실행 실행 메서드 바로 밑이 호출 메서드 5) 기본형 매개변수와 참조형 매개변수 기본형 (read only)…

LV1. 핸드폰 번호 가리기

핸드폰 번호 가리기 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 4 이상, 20이하인 문자열입니다. 입출력 예 phone_number return 01033334444 027778888 풀이 [답] 배운 것 len함수 활용 - (마이너스)를 사용하여 문자열 뒤에서 슬라이스하기 정말 기초적인 내용만 가지고도 풀 수 있는 진짜 실용적인 문제! 참고 프로그래머스

LV1. 같은 숫자는 싫어

같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 배열 arr에서 제거 되고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를들면 arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연수 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수 입출력 예 arr answer [1,1,3,3,0,…

LV1. 가운데 글자 가져오기

가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s return “abcde” “c” “qwer” “we” 풀이 python3 참고 프로그래머스