전체 글

인생은 새옹지마
· FE/HTML
HTML이란? 웹사이트에서 눈에 보이는 정보나 특정 구역을 설정할 때 사용하는 언어 HTML 기본 틀 HTML5라는 신조어로 몬서를 선언하는 태그이다. 과거에 사용된 언어 중 일부는 사용할 수 없다. HTML 문서의 시작과 끝을 의미한다. 모든 HTML 태그들은 태그 안쪽에 입력해야 한다. 을 넣으면 모든 문자를 웹 브라우저에서 깨짐 없이 표시하겠다는 뜻이다. 웹사이트의 간단한 요약 정보를 담는 영역이다. 웹사이트에서 노출되지 않는다. 모든 눈에 보이는 정보들이 body에 들어간다.
· 일상
다 까먹기 전에 써야겠다 싶어서 지금 써 본다. 합격하자마자 바로 썼어야 되는데 이것저것 준비하느라 좀 늦은 감이 있지만 기억을 꺼내서 써야겠다. 자기소개서 작성 코테에서 당연히 떨어질 거라고 생각해서 대충 쓰긴 했는데 막상 쓰다 보니 나 자신을 돌아보는 시간을 가질 수 있었던 것 같다. 해둔 게 정말 없구나 싶은,,ㅠ 1차 코딩 테스트 기억은 거의 안 나는데 8문제 정도 나왔었는데 알고리즘 5문제, sql 2문제, web 1문제였던 거 같다. 문제는 그렇게 어렵지는 않았던 것 같다. sql과 web 공부를 시작하지 않았어서 알고리즘만 3-4문제 풀었는데 솔직히 맞게 푼지도 모르겠고 붙을 줄도 몰랐다 ㅎ 2차 코딩 테스트 당연히 2차에서 떨어지겠지 싶었다. 백준을 푼 지도 꽤 오래됐고 이코테도 학기 시작..
한창 백준 문제 풀 때 DP의 개념에 대해 정리한 글이다. 이번 글에서는 추가적으로 알게 된 것들만 정리해보자. https://aodtns.tistory.com/16?category=993972 백준 1003번 - 피보나치 함수 피보나치 함수를 구현하는 문제이다. 하지만 일반적인 재귀함수를 이용하는 방법으로 풀면 시간 초과가 뜰 것이다. 이를 해결하기 위해서 동적 계획법에 대해 알아보자. 동적 계획법 (Dynamic Prog aodtns.tistory.com DP를 사용하기 위한 조건 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다. 분할 정복(Divide and Conquer)과의 차이점 분할 정복과 비슷한 느낌이지만 DP는 문제들이 ..
그래프 (Graph) 그래프는 노드(Node 혹은 정점(Vertex))와 간선(Edge)으로 표현된다. 그래프 탐색이란 하나의 정점으로부터 다른 노드들을 방문하는 것을 말한다. 또한 두 노드가 간선으로 연결되어 있다면 "두 노드는 인접하다(Adjacent)" 라고 말한다. 인접 행렬 (Adjacency Matrix) 인접 행렬은 2차원 배열로 그래프의 연결 관계를 표현하는 방식이다. 이 때 연결이 되어있지 않은 노드끼리는 무한대의 비용이라고 생각한다. 실제 코드에서는 논리적으로 정답이 될 수 없는 큰 값들을 999999999 등의 값으로 초기화하는 경우가 많다. INF = 999999999 #무한의 비용 선언 # 인접 행렬 구현 grpah = [ [0, 7, 5], [7, 0, INF], [5, INF,..
TDD가 무엇인지 알아보기 전에 익스트림 프로그래밍에 대해 간략하게 알아보자. (나무 위키 체고) eXtream Programming (XP) 익스트림 프로그래밍(eXtream Programming, XP)이란 애자일 프로그래밍의 대표적인 개발방법론 중 하나로, 고객이 원하는 소프트웨어를 빠른 시간 내에 프로토타입의 형태로 전달하고 이를 통해 고객이 원하는 소프트웨어를 이끌어내며, 수시로 발생하는 요구사항에 대처하는 것을 목표로 한다. 다른 애자일 방법론과 구별되는 XP의 특징은 테스팅이다. 구현과 테스트를 하나의 쌍으로 취급하여, 실제 구현과 동시에 테스트 코드를 작성하도록 한다. TDD (Test Driven Development) 테스트 주도 개발(Test Driven Development, TDD..
의존관계 주입은 크게 4가지로 나눌 수 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다. "불변, 필수" 의존관계에 사용된다. 생성자가 1개만 있다면 @Autowired를 지정해주지 않아도 자동 주입된다! 수정자 주입 (setter 주입) setter라고 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존 관계를 주입하는 방법이다. "선택, 변경" 가능성이 있는 의존 관계에 사용한다. 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용한다. @Autowired의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하..
싱글톤 패턴이든 스프링 같은 싱글톤 컨테이너를 사용하든 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 그러므로 무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 상황이 심각해지니 조심하자 이런 식으로 StatefulService를 만들고 테스트를 실행해 보자. 사용자 A와 B가 10000원, 20..
일반적인 자바 프로그래밍 웹은 보통 여러 고객이 동시에 요청을 한다. 일반적인 자바 프로그래밍에서는 고객이 요청을 할 때마다 객체를 생성(new)한다. memberServiceImpl()을 리턴해주는 memberService 객체를 두 개 만들어서(new) 출력해보자. 각 memberService 객체를 보면 서로 다른 두 개가 생성이 된 것을 확인할 수 있다. 문제점 MemberService 객체를 생성할 때 MemberServiceImpl 객체만 생성하는 것이 아니라 MemberServiceImpl의 인자 값으로 넘겨준 memberRepository()에서의 MemoryMemberRepository() 또한 생성되기 때문에 고객의 요청이 들어올 때 마다 2개의 객체가 생성된다고 볼 수 있다. 트래픽이..
aodtns
맹의 코딩 기록장