| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- k8s
- Sort
- 알고리즘
- 클린아키텍처
- 자바
- 이펙티브자바
- 엘라스틱서치
- Effective Java
- 오블완
- 카카오
- 카카오 면접
- 자바스크립트
- 스프링
- java
- 이펙티브 자바
- 스프링핵심원리
- Effective Java 3
- effectivejava
- 스프링 핵심원리
- kubernetes
- 이차전지관련주
- 스프링부트
- JavaScript
- Spring
- 예제로 배우는 스프링 입문
- 티스토리챌린지
- 김영한
- ElasticSearch
- 알고리즘정렬
- Kotlin
- Today
- Total
목록개발 (134)
Kim-Baek 개발자 이야기
NextStep 이라는 교육 플랫폼에서 TDD, Clean Code With Java 라는 수업을 들으면서 정말로 많은 것들을 배우고 있다. 내가 자바를 제대로 쓰고 있었던게 맞나...? 라는 의문이 들정도로 내가 고쳐야될 것이 정말 많다는 것을 느끼는 중이다. 이 과정을 통해서 배우는 것들을 정리하고, 계속 봐야겠다는 생각을 하며 포스팅을 해보고자 한다 :) 객체지향 생활 체조 원칙? 소트웍스 앤솔러지라는 책에서 나오는 9가지 원칙이라고 한다. 클린코드를 위한 원칙이라고 생각하면 되는데, 상당히 구체적인 내용이라서 이해하기가 쉽다. 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 4: 한..
Jpa를 사용하다가, entity를 repository를 통해서 삭제했는데 DB에 값이 남아있고 삭제가 되지 않는 경우가 있다. 어떤 경우인지 우선 살펴보겠다. 첫 번째로 유저 엔티티이다. @Entity public class Users implements Serializable { @Id @GeneratedValue private long id; private String name; @OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = {CascadeType.ALL}) private Set userRoleUser; // GETTERS AND SETTERS } 두 번째로 유저 롤 엔티티이다. @Entity public class UserRol..
일반적으로 회사에서 업무를 하면 Git 을 사용하는 경우가 가장 많다. 본인이 작업한 내용을 push 하고 merge까지 하려고 하면, 다른 사람이 작업한 내용과 conflicts 가 나는 경우가 있다. 최근 Github 에서는 충돌이 났을 때, 간단한 충돌의 경우 웹 상에서 해결할 수 있는 기능이 존재한다. [Github Web 에서 충돌 해결] Merge를 하려고 보면 저렇게 충돌이 났다고 나오고, Resolve conflicts 버튼이 활성화 된다. 이 버튼을 누른다. 그러면 아래와 같이 충돌난 부분의 소스코드가 나온다. 이 부분을 고치고, 체크하면 Github 웹 상에서 바로 충돌의 해결이 가능하다. [Git 명령어로 충돌 해결] 모든 경우에 웹으로 되는 것이 아니기 때문에, 명령어로 충돌을 해결..
스칼라에 대해서 이야기 해보려고 한다 이전 포스트에서 Spark 의 구조에 대한 설명을 했는데 Spark 코드를 주로 Scala로 많이 작성한 것들을 봤었다 Scala 무엇일까?? Functional Programming 언어로 많이 불린다. Scala lets you write code in an object-oriented programming (OOP) style, a functional programming (FP) style, and even in a hybrid style, using both approaches in combination. 스칼라는 또한 객체지향적인 (OOP) 프로그래밍도 가능하고 함수형 프로그래밍(FP) 프로그래밍도 가능하다 Scala 공식 문서에는 Hybrid Style?..
오늘 Apach Spark 에 대해서 공부해보려고 합니다. Apach Spark 는 In memory 방식의 대용량 데이처 처리 엔진입니다 Java, Scala, Python, R 과 같은 high level API 를 제공하고 있고, 특히 Spark SQL 같은 SQL을 위한 다양한 라이브러리를 제공하고 있습니다. 분산 클러스터 컴퓨팅 프레임워크로 Standalone 환경 뿐만 아니라 Cluster mode를 통해 대용량 데이터 처리가 가능합니다 특징 스파크는 인메모리 (In Memory) 기반 처리로 빠른 처리가 가능하며 Cluster Manger를 활용해 분산환경에서도 처리가 가능합니다. YARN, Mesos, Kubernetes 등 다양한 클러스터에서 동작이 가능합니다 기존 대용량 처리 프레임워크..
브라우저에서 html을 그리기 위해서 여러 가지 과정이 있다는 것을 알고 있었지만 정확하게 알지 못했는데, 렌더 트리가 어떻게 그려지고, 어떤 과정인지를 정확하게 설명하고 있는 내용이다. 브라우저의 핵심 기능은 사용자가 참조하고자 하는 웹페이지를 서버에 요청(Request)하고 서버의 응답(Response)을 받아 브라우저에 표시하는 것이다. 브라우저는 서버로부터 HTML, CSS, Javascript, 이미지 파일 등을 응답받는다. HTML, CSS 파일은 렌더링 엔진의 HTML 파서와 CSS 파서에 의해 파싱(Parsing)되어 DOM, CSSOM 트리로 변환되고 렌더 트리로 결합된다. 이렇게 생성된 렌더 트리를 기반으로 브라우저는 웹페이지를 표시한다. 클라이언트 (브라우저) 를 보면 렌더링엔진과 자..
프론트엔드 관련 테스트를 하면서, 항상 사용했던 것이 브라우저의 개발자 도구이다. 개발자 도구를 통해서 어떤 행동을 할 수 있을지를 아래에서 설명한다. 1.1 개발자 도구 크롬 브라우저가 제공하는 개발자 도구(DevTools)은 자바스크립트 개발에 필수적인 강력한 도구이다. 개발자 도구는 브라우저에 기본 내장되어 있으므로 별도의 설치가 필요없다. 개발자 도구는 아래의 단축키로 오픈할 수 있다. 단축키 Windows F12 또는 Ctrl + Shift + I macOS command ⌘ + option ⌥ + I 예전에 프론트엔드를 개발할 때 가장 어려운 것이 무엇일까요? 라는 질문을 들은 적이 있다. 그 때의 나는 디버깅이 아닐까요 라고 대답을 했던 것 같다. 사실 프론트엔드의 디버깅을 내가 잘 할 줄 ..
- Type 통일 : 부모타입에 자식객체를 모두 대입가능 상속 -> 다형성 + overriding -> abstract -> Interface - 코드 재사용 -> 타입통일 : 다형성을 위해 사용이 된다. ※ 객체와의 좋은 관계 1. high cohesion (높은 집중도) (하나의 클래스가 하나의 일만 하자) : 단일 책임 2. loose coupling (느슨한 연결) - 관계가 깊을수록 다른 쪽에 영향을 끼칠 가능성이 많다. ◎ 내부 class (Nested class, inner class) - JDK 1.1 에서 추가되었다. GUI에 대한 것이 많이 바뀌게 되었는데, 그것을 지원하기 위해 나오게 되었다. class A{ class B{ } -> class 안에 class를 정의 -> 외부 cla..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ abstract - 메소드와 class 에 붙는 제한자 (modifier) - 추상의 , 구현되지 않은 이라는 의미 ex) public abstract class A { } 이렇게 추상적인 클래스의 경우 하위클래스에서 재정의 (오버라이딩) 해야하는데 이는 강제가 아니다. -> 다른메소드를 만들 수도 있고, 안만들 수도 있고 자기 마음대로 하게된다. => 이것을 강제하는 것이 abstract 메소드이다 ※ Animal 의 경우 타입으로는 많이 쓰인다. 하지만 실제 new Animal 로 객체를 생성해서 쓸일은 많이 없다 ex) 동물원에서 개 , 고양이 객체를 생성하지 동물객체를 생성하지는 않는다. => 부모클..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ super - 부모객체를 의미한다. this 는 (현재)이 객체 - super.부모객체의 멤버 -> 부모객체의 instance 변수/메소드 호출시 사용 ※ super . 는 생략하더라도 보통 컴파일러가 알아서 처리! - ★ super( [값, ...] ) -> 부모객체의 생성자 호출 -> 생성자 구현부의 첫 구문으로 와야한다 (this(), super()는 같이 올 수 없어!) -> 생성자 구현부에 this () 나 super 가 없으면 super(); 가 첫 구문으로 들어가게 된다 public A( ){ super(); 부르기 -> 상위 클래스의 객체를 자동으로 만들어서 같이 묶어서 사용할 수 있도록 하기..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ※원래 프로그램은 내부에서 연관을 갖고 동작했다.(절차지향적에서) 모듈화를 했다고 해서 그 연관이 사라지는 것이 아니다. 그것을 모듈과의 관계로 표현한다. ◎ 의존관계 (Dependency) ※Association(의존관계) ⊃ has a ⊃ Aggregation ⊃ composition ⊃ use a - 의존관계의 의미 : 하나의 객체가 일하기 위해 다른 객체에 의존(필요로 하는) 관계 ->메소드 메소드, 함수 : 제공하는 기능(println()) 메소드 내에서 사용하는 관계 -> local 변수로 사용 - has a(포함) 관계 : 하나의 객체가 다른 객체를 자신의 속성으로 가지고 있는 관계 -> Insta..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ Static 키워드(제한자) - instance 변수, 메소드, static block, inner class 에서 사용된다. - 의미 : Class 의 멤버 -> 객체와는 관계없다 (단 한개만 존재하게 된다) - Card 클래스에서 kind 나 number의 경우 각 카드마다 달라지는 값이다 그러나 weight, height 의 경우 모든 카드에 동일한 값이다! -> Class 에 종속시키자 (Static) ex) Class A{ static int var; -> new A( ) 를 했을 때, var과 go()는 객체안에 존재하지 않는다. static void go( ){ } } ※ 메모리 영역 - hea..
함수 호출과 this Arguments 객체 자바스크립트에서 함수를 호출할 때 인수들과 함께 암묵적으로 arguments 객체가 함수내부로 전달된다. arguments 객체는 유사 배열 객체이다 넘겨진 인자(배열), length, callee(함수의 참조 값) 으로 구성되어 있다. function sum(a, b){ return a+b; } console.log(sum(1)); //NaN console.log(sum(1,2)); //3 console.log(sum(1,2,3)); //3 // length를 이용한 구현 function sum(){ var result = 0; for(var i=0; i < arguments.length; i++){ result += arguments[i]; } return..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리) ※Heap 내부의 내용을 없애는 시점 : 더 이상 사용할 수 없을 때 ex) new A( ) -> 값을 사용할 수 없다. 지정되지 않음! : JVM 이 처리한다. ※ reference 타입은 메모리에 동일한 크기로 주소가 잡힌다 (4byte) primitive 타입은 각각 크기에 맞게 공간을 할당한다. ※ 메소드가 찾는 것은 기본적으로 Local 변수이다. 없으면 instance 변수도 확장해서 찾게 된다. this 를 컴파일러가 추가해서 인스턴스 변수를 찾게 된다. ※ M..
Function Object 자바스크립트에서는 함수도 객체이다. 함수에 정의된 로직 말고도 객체처럼 프로퍼티들을 가질 수 있다. function add(x, y){ return x+y; } add.status = "good"; console.log(add(3,3)); //6 console.log(add.status); //good 함수를 생성할 때 만들어 지는 함수 코드는 함수 객체의 [[Code]] 내부 프로퍼티에 자동으로 저장된다. 함수는 일급 객체이다 자바스크립트에서는 함수도 일반 객체처럼 취급된다. 따라서 일급 객체를 만족하는 특징들이 있다. 리터럴에 의한 생성 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능 함수의 인자로 전달 가능 함수의 리턴값으로 리턴 가능 동적으로 프로퍼티를 생성 및 ..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 자바의 메모리 영역 ※ class loading : 하드에 있는 자바파일을 cpu 가 빠르게 처리하기 위해 Main Memory 에 올리는 것(JVM이 처리) 1. Heap (힙) 영역 - instance 가 저장되는 영역 - instance 변수 2. execution stack (실행스택) 영역 - 실행 중인 메소드의 지역변수들이 저장되는 영역 3. 메소드 (class) 영역 - class 변수(class 코드)들이 저장되는 영역 public class Worker { 25? true : false; Person per = new Person(); Person per2 = new Person(); per..
JavaScript Function 함수 정의하기 자바스크립트 함수는 3가지 방법으로 생성할 수 있다. 함수 선언문 함수 표현식 Function() 생성자 함수 1. 함수 선언문 방식 함수 선언문 방식은 객체 리터렁 방식과 같다. 자바스크립트에서는 함수도 일반 객체처럼 취급하기 때문이다. 함수 선언문 방식으로 정의할 경우 반드시 함수명이 정의 되어야 한다. function sum(x, y) { return x+y; } 2. 함수 표현식 방식 자바스크립트에서는 함수도 하나의 값처럼 취급된다. 함수를 만들고 변수에 할당하여 생성하는 것을 함수 표현식이라 한다. //sum 이라는 변수에 두 값을 더해주는 익명 함수 참조 값을 저장한다. var sum = function(x, y) { return x+y; } ..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ this( [ 값, ... ] ) 의 사용 - 생성자에서 오버로딩된 다른 생성자 호출시에 사용한다 - 반드시 생성자 구문의 첫 명령으로만 올 수 있다. ex) this( ); , this( 10 ); , this( 10, "abc" ); -> 생성자에서 다른 생성자를 호출하고 싶을 때 사용! * A( ) { 다른 내용 -> 조건문이나 반복문의 사용도 허용이 안된다. 무조건 첫번째에 와야한다. this( 10 ) } * A ( int i , int j , String s ){ this.i = i; this.j = j; -> 이 두줄을 this( i, j ) : 코드의 편리를 위해. i, j 는 다른 생성자에서..
Data Type 자바스크립트는 크게 2가지의 데이터 타입으로 나뉜다. (기본타입 / 참조타입) 1. 기본 타입 - Number - String - Boolean - Undefined - Null 자바스크립트의 기본 타입은 그 자체가 하나의 값을 나타내는 것이다. var num = 10; var str = "jeahyun"; var flag = true; var empty; var val = null; typeof num // number typeof str // string typeof flag // boolean typeof empty // undefined typeof val // object typeof 는 피연산자의 타입을 리턴해준다. 모든 숫자를 64비트 부동 소수점 형태로 저장한다(C의 do..
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다 ◎ 배열의 리턴 int go() { return new int{10, 20, 30}; -> 배열 넘길때 사용 } ◎ 리턴(return) - 호출한 곳 (caller 메소드) 로 돌아가라 구문 : return [ 값 ]; - 1개의 값 -> 메소드의 retun type이 void 인 경우 생략가능 하지만 다른 type 인경우 반드시 return 구문 실행이 보장되어야 한다. ◎ 메소드 and 생성자 오버로딩 (overloading) - 매개변수가 다르면 같은 메소드 이름을 여러거 메소드에 사용할 수 있다. -> 쓰는 사람이 편해진다. -> 개수나 타입 class A{ void a( ) { } int b ( int..
