며칠동안 골머리를 앓던 문제를 해결했다.
문제의 원인은 라이브러리를 적절히 import하지 않았다는 것이다!
개인 프로젝트나 부트 캠프 등에서는 주로 Springboot와 React를 사용했다.
현 회사에서는 Nexacro와 Nexcore라는 프레임워크를 쓰고 있다.
딱 봐도 생소해보이지만 실제로 사용해보니 Springboot, React와 별반 다르지 않았다.
나는 Nexacro로 프론트엔드 개발을 하면서 발생한 에러를 잡지 못해서 며칠간 고생을 했다.
오늘 드디어 에러의 가장 큰 원인을 찾았다.
개발을 해본 사람이라면
'라이브러리를 import하지 않고 해당 라이브러리의 함수를 가져다 쓰려고 하면 당연히 에러가 나지! 이걸 누가 몰라?'
라고 생각할 것이다.
맞다.
이건 기본 중의 기본이다.
그러나 너무나 기본적인 개념이기 때문에 쉽게 지나칠 수 있다.
기업에서 개발 실무를 보게 되면 주로 유지보수, 운영을 하게 될 것이다.
처음부터 끝까지 새롭게 코드를 짜는 일은 흔치 않은 일이다.
유지보수를 할 때 가장 어려운 점은 내가 아닌 남이 짠 코드를 이해하고 수정해야한다는 점이다.
그렇기 때문에 시간도 오래 걸리고 실수할 가능성도 높다.
이러한 실수를 한 기념으로 기본 중의 기본! 라이브러리에 대해 복습해보려고 한다!
우선 라이브러리(library)란 뭘까?
영어 단어 자체의 뜻으로 보면 도서관이라는 뜻이다.
우리는 도서관에서 원하는 책을 찾아 빌려볼 수 있지만, 그 책은 내 것이 아니고 도서관에 종속되어 있다는 특징이 있다.
개발에서의 라이브러리도 동일한 개념이다.
우리는 라이브러리에 있는 함수, 클래스 등을 원하는 만큼 가져다 쓸 수 있다.
여기서 주의해야할 점은 2가지이다.
1. 내가 원하는 책이 있는 도서관을 찾아가야한다.
2. 도서관을 언급해주지 않으면 책을 찾을 수 없다.
무슨 말일까?
간단히 예를 들어 살펴보자.
어떤 문자열의 알파벳을 모두 대문자로 바꾸는 함수가 필요하다고 가정해보자.
1. String 값을 대문자로 바꿔주는 함수가 있는 라이브러리를 찾아가야한다.
2. 코드에서 해당 라이브러리를 반!드!시! import해야한다.
위 2가지 주의점을 고려하여 간단히 코드를 짜면 아래와 같이 짤 수 있다.
import org.apache.commons.lang3.StringUtils;
public class Main {
public static void main(String[] args) {
System.out.println(StringUtils.capitalize("hello"));
}
}
위처럼 작성하면 모든 알파벳을 대문자로 바꿔주는 함수를 따로 정의하지 않더라도 쉽게 외부의 기능을 가져다 쓸 수 있게 된다.
여기서 내가 import를 하지 않고 Main 코드를 돌리면 어떻게 될까?
Error:(5, 27) java: cannot find symbol
symbol: variable StringUtils
location: class Main
위와 같은 에러가 발생할 것이다.
나의 경우, 글로벌 함수로 정의된 함수를 사용하는 코드에서 위와 같은 에러가 발생하지 않고 아예 해당 코드가 실행되지 않는 문제가 있었다.
그래서 아무리 trace를 찍어봐도 (javascript 코드였다) console에 로그가 찍히질 않았다.....
앞으로는 절대 이런 일로 시간을 헛되이 보내지 않도록 외부 함수 혹은 글로벌 함수를 사용할 때 적절한 라이브러리가 import 되어 있는지는 기본적으로 확인하는 습관을 들여보자!!
'백엔드' 카테고리의 다른 글
| M:N을 쓰면 안 되는 이유 (3) | 2024.07.23 |
|---|---|
| MVC 모델에서 왜 M, V, C를 나눌까? (0) | 2024.07.02 |