분류 전체보기

    단위 테스트(Unit Test)와 통합 테스트(Integration Test)

    앞선 포스트에서는 테스트 코드란 무엇인지, 또 테스트 코드를 작성하는 이유는 무엇인지에 대해 간단하게 알아보았다. 테스트 코드는 왜 만들까? 테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험 lildev.tistory.com 이번에는 테스트 코드의 다양한 종류와 각 종류 별로 소프트웨어의 어떤 부분에 집중하는지, 그리고 그중에서도 특히 단위 테스트와 통합 테스트에 대해 자세하게 알아보겠다. 테스트 코드의 종류 테스트 코드에는 단위 테스트, 통합 테스트, 부하 테스트 등 우리가 흔히 들어본 테스트 방식뿐만 아니라 인수 테스트, 회귀 테스트, E2E 테스트 등 정말 많..

    (JAVA) 길 찾기 게임

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이진트리를 사용한 기본적인 문제이다. 아래와 같은 순서로 구현해나가며 문제를 풀 수 있었다. 트리에 사용할 Node 클래스 구현 nodes라는 node들을 담을 리스트에 node를 삽입 nodes를 y의 내림차순으로, y가 동일하다면 x의 오름차순으로 정렬 (트리에 올바른 순서대로 담기 위함) 정렬된 리스트에서 node를 하나씩 꺼내면서 트리 만들기 완성된 트리를 전위 순회한 값..

    (JAVA) 금과 은 운반하기

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/86053 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이분 탐색과 Parametric Search를 사용한 풀이이다. Parametric Search는 특정 상황을 만족하는 특정값의 최대 혹은 최댓값을 구하는 최적화 문제에 적용할 수 있음을 생각하고, 이 알고리즘을 이번 문제에 적용할 생각을 하는 것이 중요하다. Parametric Search는 최적화 문제를 결정 문제로 바꾸는 것이다. 이번에 풀이한 '금과 은 운반하기' 문제를 ..

    테스트 코드는 왜 만들까?

    테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험을 돌아보았을 때 나 자신에게도 "중요하다. 중요하다." 되뇌기만 하였을 뿐 실질적으로 프로젝트 내에서 진행한 적은 없었다. 이런 상황에서 네이버 부스트캠프에서 곰터뷰 프로젝트를 진행하면서, 꼭 테스트 코드를 프로젝트에 적용해보고 싶다는 생각을 하였었다. 다행히도 함께 백엔드 파트를 진행하신 팀원분께서 테스트 코드를 사용하신 경험이 있으셨기에, 큰 부담 없이 테스트 작성을 학습해 가며 진행할 수 있었다. 학습을 통해 알게 된 테스트 코드를 작성하는 이유를 정리해보고, 또한 프로젝트를 통해 직접 테스트 코드 작성을 경험..

    SSAFY 11기 전공자 합격 후기 (면접 스터디 X)

    SAFFY 11기에 지원하여 합격하였기에 어떤 방식으로 선발 과정이 진행되고 또 어떻게 준비하였는지 정리를 하면 다른 지원자들에게 큰 도움이 될 것이라고 생각하여서 전체적인 과정을 간단하게 정리해보고자 한다.지원서지원서는 매우 간단한 양식이었다. 인적사항, 학력, 교육희망지역, 경력 등 아주 간단한 개인정보를 입력하면 된다.인적사항이 당락에 영향이 크게 있진 않겠지만, 참고로 필자의 경우에는 인서울/3.8/컴퓨터공학과 전공생이었고, 경력과 자격증은 없었고, 1지망 - 서울/2지망 - 대전으로 지원하였다.에세이에세이의 경우에는 지원서 마감일 다음날부터 그 주의 주말 정도까지 입력해야 했다. 걱정과는 다르게 에세이의 경우 하나의 질문만 작성하면 되었기에 시간적인 여유는 충분했다.SW 관련한 경험과 SAFFY..

    (CS) 무중단 배포

    프로젝트나 서비스 개발에 백엔드 개발자로 참여하였을 때, 로컬이 아닌 실제 환경에서 개발한 기능들을 테스트하고 또 사용하기 위해서 반드시 진행해야 하는 작업이 있다. 그것은 바로 배포이다. 1년이 넘는 시간 동안 백엔드 개발을 많이 진행하였기에 여러 번 배포를 진행하였지만, 무중단 배포에 대해서는 들어만 보았을 뿐 정확하게 어떤 방식으로 진행되는지에 대한 학습조차 되어 있지 않았다. 현재 진행 중인 프로젝트에서 무중단 배포를 진행해 볼 기회를 얻어서 이에 대해 학습 후 정리해보고자 한다. 배포란? 무중단 배포에 대해 정리하기에 앞서 배포가 무엇인지 먼저 간단하게 알아보고자 한다. 배포라는 단어 자체는 원래 신문이나 책자 등을 널리 나누어주는 행동을 나타내는 말이다. 소프트웨어 관점에서 말하는 배포도 역시..

    (JAVA) 백준 2805번 - 나무 자르기

    문제 링크: https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 풀이 처음에는 브루트 포스를 사용하여 아래와 같이 풀이해 보았다. import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { public static void main(String[] a..

    (CS) 계수 정렬 & 기수 정렬

    계수 정렬(Counting Sort)과 기수 정렬(Radix Sort)은 비교 정렬이 아닌 정렬 알고리즘으로, 특정한 상황에서 매우 효과적인 알고리즘이다. 각 정렬 알고리즘에 대해 자세하게 알아보자. 계수 정렬 계수 정렬은 범위에 해당하는 각 숫자의 빈도수를 계산하고, 빈도수의 누적값을 사용하여 데이터의 위치를 결정하여 정렬하는 알고리즘이다. 정렬할 데이터의 범위를 알고 있을 때 매우 효과적인 정렬 알고리즘이다. 비교 정렬이 아니기에 특정 상황에서 매우 빠르지만, 정렬할 데이터의 범위만큼의 추가적인 메모리가 필요하다. 정렬 과정 데이터들의 최솟값과 최댓값을 확인하여 전체 범위를 파악한다. 범위에 해당하는 각 숫자의 빈도수를 세어 배열에 저장한다. 각 숫자의 빈도수를 누적하여 해당 숫자의 정렬된 위치를 계..

    (CS) 트리 & 트라이

    트리 트리는 계층적 구조를 가지며, 각 노드들이 서로 연결되어 있는 자료구조이다. 트리는 하나의 루트(root) 노드에서 시작하여 다양한 자식 노드들로 확장된다. 각 노드는 부모와 자식 노드 간의 관계를 가진다. 트리는 순환 구조를 갖지 않으며, 각 노드는 정확히 하나의 부모를 가진다. 트리를 이루는 구조를 하나씩 알아보자. Node(정점, Vertex) 트리의 기본 단위로, 정보를 저장하는 단일한 항목 노드는 데이터 필드(Key)와 하나 이상의 포인터를 가짐 Key 노드를 구분하거나 정렬하는데 사용하는 값 노드의 데이터 필드에 저장되는 값 Edge(간선) 노드 간의 연결 관계를 나타내는 선으로, 트리의 구조를 형성 두 노드 간의 간선은 부모-자식 관계를 나타냄 Root 트리의 최상위 노드로, 모든 다른..

    (CS) 객체와 객체지향이란?

    컴퓨터 전공생, 아니 코딩에 대한 조금의 학습만 진행해본 사람이라면 객체지향 또는 객체라는 말에 대해 들어본 적이 있을 것이다. 필자도 4년 간의 전공 수업 또 외부 교육 프로그램을 수강하였지만 이에 대한 명확한 정의를 딱 내리라고 하면 솔직히 말해서 어려울 것 같다는 생각이 들었다. 그래서 객체와 객체지향이라는 개념에 대한 학습과 명확한 정의를 내려보고자한다. 객체란? 우선 객체란 무엇인지 먼저 알아보고 시작하는 것이 추후의 내용에 대한 이해를 위해 좋을 것 같다. 우선 객체의 사전적 의미는 실제 존재하는 것, 실체를 의미한다. 즉, 우리가 인식하고 확인할 수 있는 것이라고 말할 수 있겠다. 하지만 컴퓨터 공학에서 말하는 객체는 객체의 사전적 의미와 조금은 다르다. An object is a class..