개발
Python은 Call by value일까, Call by reference일까?
최근 Python을 이용하여 알고리즘 문제를 자주 풀고 있으며 동시에 또 회사에서도 Python을 이용하여 백엔드 개발을 진행하고 있기에 Python에서는 어떤 방식으로 함수에서의 호출이 일어나는지 알아보고 싶어서 관련 내용을 정리하고자 한다.우선 이에 대한 정리 전에 간단하게 Call by reference, Call by value가 무엇인지 알아보고자 한다.1. Call by valueCall by value는 값에 의한 호출이다. 즉, 함수에 인자를 넘겨줄 때 인자에 "값"을 복사하여 넘겨준다는 것이다.함수의 실행 환경을 저장하는 스택 프레임에 인자의 값의 복사본을 담음으로써 함수 내에서 스택 프레임 내에 존재하는 값을 사용할 수 있도록 한다.그렇기 때문에 함수 내에서 만약 해당 인자를 변경하더라..
트랜잭션이란?
회사에서 최근 업무를 진행하면서 트랜잭션을 사용하는 일이 매우 많다. 현재 MongoDB를 이용하여 개발하고 있는 프로젝트에서 트랜잭션을 사용하고 있는 이유는 아래와 같다. 대용량의 데이터를 벌크로 처리해야하는 경우가 많은데, 이 때 하나의 데이터라도 유효하지 않거나 실행 중 실패가 발생한다면 모든 처리 내용을 롤백 시켜야 함 여러 사람들이 하나의 데이터에 동시에 접근하여 수정을 가하는 경우가 발생할 확률이 기획 상 매우 높음 여러 컬렉션에 위치한 여러 도큐먼트에 대한 삽입이나 수정이 하나의 서비스 로직에서 수행되는 경우가 많음 위와 같은 이유들로 트랜잭션을 진행하였고, 이들은 곧 트랜잭션으로 얻을 수 있는 가장 큰 장점들이다. 이렇게 개발 과정에서 어느 경우에 트랜잭션을 사용하는지는 알고 있지만, 이에..
단위 테스트(Unit Test)와 통합 테스트(Integration Test)
앞선 포스트에서는 테스트 코드란 무엇인지, 또 테스트 코드를 작성하는 이유는 무엇인지에 대해 간단하게 알아보았다. 테스트 코드는 왜 만들까? 테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험 lildev.tistory.com 이번에는 테스트 코드의 다양한 종류와 각 종류 별로 소프트웨어의 어떤 부분에 집중하는지, 그리고 그중에서도 특히 단위 테스트와 통합 테스트에 대해 자세하게 알아보겠다. 테스트 코드의 종류 테스트 코드에는 단위 테스트, 통합 테스트, 부하 테스트 등 우리가 흔히 들어본 테스트 방식뿐만 아니라 인수 테스트, 회귀 테스트, E2E 테스트 등 정말 많..
테스트 코드는 왜 만들까?
테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험을 돌아보았을 때 나 자신에게도 "중요하다. 중요하다." 되뇌기만 하였을 뿐 실질적으로 프로젝트 내에서 진행한 적은 없었다. 이런 상황에서 네이버 부스트캠프에서 곰터뷰 프로젝트를 진행하면서, 꼭 테스트 코드를 프로젝트에 적용해보고 싶다는 생각을 하였었다. 다행히도 함께 백엔드 파트를 진행하신 팀원분께서 테스트 코드를 사용하신 경험이 있으셨기에, 큰 부담 없이 테스트 작성을 학습해 가며 진행할 수 있었다. 학습을 통해 알게 된 테스트 코드를 작성하는 이유를 정리해보고, 또한 프로젝트를 통해 직접 테스트 코드 작성을 경험..
SSAFY 11기 전공자 합격 후기 (면접 스터디 X)
SAFFY 11기에 지원하여 합격하였기에 어떤 방식으로 선발 과정이 진행되고 또 어떻게 준비하였는지 정리를 하면 다른 지원자들에게 큰 도움이 될 것이라고 생각하여서 전체적인 과정을 간단하게 정리해보고자 한다.지원서지원서는 매우 간단한 양식이었다. 인적사항, 학력, 교육희망지역, 경력 등 아주 간단한 개인정보를 입력하면 된다.인적사항이 당락에 영향이 크게 있진 않겠지만, 참고로 필자의 경우에는 인서울/3.8/컴퓨터공학과 전공생이었고, 경력과 자격증은 없었고, 1지망 - 서울/2지망 - 대전으로 지원하였다.에세이에세이의 경우에는 지원서 마감일 다음날부터 그 주의 주말 정도까지 입력해야 했다. 걱정과는 다르게 에세이의 경우 하나의 질문만 작성하면 되었기에 시간적인 여유는 충분했다.SW 관련한 경험과 SAFFY..
(CS) 무중단 배포
프로젝트나 서비스 개발에 백엔드 개발자로 참여하였을 때, 로컬이 아닌 실제 환경에서 개발한 기능들을 테스트하고 또 사용하기 위해서 반드시 진행해야 하는 작업이 있다. 그것은 바로 배포이다. 1년이 넘는 시간 동안 백엔드 개발을 많이 진행하였기에 여러 번 배포를 진행하였지만, 무중단 배포에 대해서는 들어만 보았을 뿐 정확하게 어떤 방식으로 진행되는지에 대한 학습조차 되어 있지 않았다. 현재 진행 중인 프로젝트에서 무중단 배포를 진행해 볼 기회를 얻어서 이에 대해 학습 후 정리해보고자 한다. 배포란? 무중단 배포에 대해 정리하기에 앞서 배포가 무엇인지 먼저 간단하게 알아보고자 한다. 배포라는 단어 자체는 원래 신문이나 책자 등을 널리 나누어주는 행동을 나타내는 말이다. 소프트웨어 관점에서 말하는 배포도 역시..
(CS) 계수 정렬 & 기수 정렬
계수 정렬(Counting Sort)과 기수 정렬(Radix Sort)은 비교 정렬이 아닌 정렬 알고리즘으로, 특정한 상황에서 매우 효과적인 알고리즘이다. 각 정렬 알고리즘에 대해 자세하게 알아보자. 계수 정렬 계수 정렬은 범위에 해당하는 각 숫자의 빈도수를 계산하고, 빈도수의 누적값을 사용하여 데이터의 위치를 결정하여 정렬하는 알고리즘이다. 정렬할 데이터의 범위를 알고 있을 때 매우 효과적인 정렬 알고리즘이다. 비교 정렬이 아니기에 특정 상황에서 매우 빠르지만, 정렬할 데이터의 범위만큼의 추가적인 메모리가 필요하다. 정렬 과정 데이터들의 최솟값과 최댓값을 확인하여 전체 범위를 파악한다. 범위에 해당하는 각 숫자의 빈도수를 세어 배열에 저장한다. 각 숫자의 빈도수를 누적하여 해당 숫자의 정렬된 위치를 계..
(CS) 트리 & 트라이
트리 트리는 계층적 구조를 가지며, 각 노드들이 서로 연결되어 있는 자료구조이다. 트리는 하나의 루트(root) 노드에서 시작하여 다양한 자식 노드들로 확장된다. 각 노드는 부모와 자식 노드 간의 관계를 가진다. 트리는 순환 구조를 갖지 않으며, 각 노드는 정확히 하나의 부모를 가진다. 트리를 이루는 구조를 하나씩 알아보자. Node(정점, Vertex) 트리의 기본 단위로, 정보를 저장하는 단일한 항목 노드는 데이터 필드(Key)와 하나 이상의 포인터를 가짐 Key 노드를 구분하거나 정렬하는데 사용하는 값 노드의 데이터 필드에 저장되는 값 Edge(간선) 노드 간의 연결 관계를 나타내는 선으로, 트리의 구조를 형성 두 노드 간의 간선은 부모-자식 관계를 나타냄 Root 트리의 최상위 노드로, 모든 다른..
(CS) 객체와 객체지향이란?
컴퓨터 전공생, 아니 코딩에 대한 조금의 학습만 진행해본 사람이라면 객체지향 또는 객체라는 말에 대해 들어본 적이 있을 것이다. 필자도 4년 간의 전공 수업 또 외부 교육 프로그램을 수강하였지만 이에 대한 명확한 정의를 딱 내리라고 하면 솔직히 말해서 어려울 것 같다는 생각이 들었다. 그래서 객체와 객체지향이라는 개념에 대한 학습과 명확한 정의를 내려보고자한다. 객체란? 우선 객체란 무엇인지 먼저 알아보고 시작하는 것이 추후의 내용에 대한 이해를 위해 좋을 것 같다. 우선 객체의 사전적 의미는 실제 존재하는 것, 실체를 의미한다. 즉, 우리가 인식하고 확인할 수 있는 것이라고 말할 수 있겠다. 하지만 컴퓨터 공학에서 말하는 객체는 객체의 사전적 의미와 조금은 다르다. An object is a class..
곰터뷰와 IDrive e2 (3) - AWS S3 SDK for JavaScript를 활용한 IDrive e2 사용법
지난 1편에서는 곰터뷰에 대한 간단한 설명과 곰터뷰에서 Object Storage로 왜 IDrive e2를 사용하게 되었는지 포스팅을 했었다. 곰터뷰와 IDrive e2 (1) - 왜 IDrive e2를 사용하게 되었나? 곰터뷰 우선 곰터뷰가 어떤 서비스인지 간단한 설명이 필요할 것 같다. 곰터뷰는 시중에 존재하는 면접 서비스와는 다르게 `무료`로 `로그인 없이` 사용할 수 있는 면접 연습 서비스이다! 곰터뷰 lildev.tistory.com 그리고 지난번 포스트였던 2편에서는 곰터뷰에서 어떤 로직을 통해 IDrive e2에 비디오를 저장하고, 이를 어떤 로직으로 서비스에서 사용할 수 있게 했는지 포스팅해보았다. 곰터뷰와 IDrive e2 (2) - IDrive e2를 사용한 비디오 저장/조회 로직 지난..