23-1학기에 파란학기를 통해 Go를 이용한 EVM 사이드체인을 만드는 프로젝트를 진행했습니다.
이 프로젝트를 계기로 Go를 처음 접해봤는데 좋은 결과물이 나온 것을 보고, Go라는 오픈소스 언어를 이용해 백엔드 서버를 구축할 수 있지 않을까 라는 생각을 하게 되었습니다.
또한, 현재 백엔드 서버 개발 언어는 Java나 Javascript, Python 등의 언어가 주를 이루고 있습니다.
상대적으로 점유율이 적은 Go를 이용해 백엔드 서버를 구축하는 것이 오픈소스를 이해하는 데에 도움이 될 것이라고 생각해서 이 아이템을 선정하게 되었습니다.
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
23-1학기에 파란학기를 통해 Go를 이용한 EVM 사이드체인을 만드는 프로젝트를 진행했습니다.
이 프로젝트를 통해 Go를 처음으로 접하게 되었고, 매우 성공적인 결과물을 얻었습니다.
이 경험을 통해 Go를 사용하여 백엔드 서버를 구축할 수 있다는 가능성을 엿볼 수 있었습니다.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
현재 대부분의 백엔드 서버 개발은 Java, JavaScript, Python 등과 같은 언어로 이루어지고 있습니다.
그러나 go는 상대적으로 점유율이 낮은 언어이기 때문에, 이를 이용하여 백엔드 서버를 구축하는 것이 오픈소스에 대한 이해를 향상시키는 데 도움이 될 것으로 기대했습니다.
## Add your files
해당 오픈소스 프로젝트(Go를 이용한 Back-end 서버 구축)를 진행함으로써 여러 가지 이점을 얻을 수 있습니다.
첫째, Go는 간결하고 가독성이 높으며, 동시성을 잘 다루는 특징을 가지고 있습니다.
이는 백엔드 서버의 개발과 유지보수를 더욱 용이하게 만들어줍니다.
-[ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
둘째, Go는 컴파일 언어로서 높은 실행 속도를 제공합니다.
-[ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
이는 대규모 트래픽이 발생하는 서비스에서 빠른 응답 속도와 처리 속도를 보장할 수 있는 장점으로 작용합니다.
```
셋째, Go는 다양한 표준 라이브러리와 함께 제공되며, 많은 오픈소스 프로젝트와 통합하기 쉽습니다.
이러한 이유로, Go를 이용하여 백엔드 서버를 구축하는 것이 오픈소스 개발에 도움이 될 것으로 기대합니다.
또한, Go를 습득하고 익히는 과정에서 다양한 도전과 학습 기회를 제공하므로, 개인적인 성장에도 도움이 될 것입니다.
-[ ] [Set up project integrations](https://git.ajou.ac.kr/Seongyeon/foss2023-1-final/-/settings/integrations)
## 개발하면서 발생했던 문제점
## Collaborate with your team
해당 프로젝트를 진행하면서 gopath에 대한 이해와 관련된 어려움을 겪었습니다.
gopath는 Go에서 패키지들을 저장하는 경로를 지정하는 환경 변수입니다.
이를 올바르게 설정하지 않으면 패키지들을 찾을 수 없거나 의도하지 않은 패키지 버전 충돌이 발생할 수 있습니다.
-[ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
처음에는 gopath를 설정하는 방법과 그 의미를 이해하는 데에 어려움을 겪었습니다.
-[ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
Go의 프로젝트 구조와 관련된 개념들이 익숙하지 않아서 올바른 경로를 설정하는 데 어려움을 겪었습니다.
-[ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-[ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
## Test and Deploy
또한, gopath를 사용하는 프로젝트와 다른 프로젝트 간의 의존성 관리도 어려웠습니다.
gopath는 모든 패키지들이 공유하는 전역적인 경로로 작동하기 때문에 다른 프로젝트에서 사용 중인 패키지의 버전이 충돌할 수 있습니다.
이를 해결하기 위해 모든 의존성을 관리하는 것이 중요한데, 이를 체계적으로 관리하는 것이 어려웠습니다.
Use the built-in continuous integration in GitLab.
또한, gopath를 설정하고 프로젝트를 진행하는 동안, 기존에 사용하던 다른 언어와는 다른 개발 환경을 익혀야 했습니다.
기존에 사용하던 언어들은 일반적으로 프로젝트를 특정 디렉토리에 저장하고 의존성을 프로젝트 내부에 관리하는 방식이었습니다.
그러나 Go의 gopath는 모든 프로젝트가 공유하는 경로로 작동하므로, 처음에는 이러한 개념의 변화에 적응하는 데에 어려움을 겪었습니다.
-[ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
이러한 어려움을 극복하기 위해, gopath에 대한 개념을 자세히 학습하고 올바른 설정 방법을 익히는 데 시간을 투자했습니다.
-[ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
또한, 의존성 관리를 위해 모듈 시스템을 사용하는 방법을 익혀서 버전 충돌 문제를 해결했습니다.
-[ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
처음에는 어려웠지만, 이러한 경험을 통해 gopath의 역할과 중요성에 대해 더 깊이 이해하게 되었고 이를 동영상 콘텐츠로 전달할 수 있었습니다.
-[ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-[ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
***
## 감상
# Editing this README
"Go를 이용한 Back-end 서버 구축"을 주제로 하는 교육 동영상 콘텐츠를 제작하면서, 오픈소스의 이해와 활용에 대해 깊게 생각하게 되었습니다.
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
첫째로, 오픈소스의 개념과 가치에 대해 더욱 명확하게 이해할 수 있었습니다.
오픈소스는 다양한 프로그램이나 라이브러리가 공개적으로 개발되고 배포되는 것을 말합니다.
이러한 오픈소스의 특징은 개발자들이 함께 협력하여 소프트웨어를 발전시키고 향상시킬 수 있다는 것을 의미합니다.
이 과제를 수행하면서 Go Back-end 서버를 구축하는 과정에서 다양한 오픈소스 라이브러리와 프레임워크를 활용하였고, 이러한 오픈소스들이 개발 속도를 향상시키고 품질을 향상시킬 수 있는 중요한 요소임을 몸소 체감하였습니다.
## Suggestions for a good README
둘째로, 오픈소스를 이해하고 활용하는 능력이 중요하다는 것을 깨달았습니다.
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
오픈소스는 그 자체로 다양한 장점과 가치를 지니고 있지만, 그 활용은 개발자의 이해와 능력에 달려있습니다.
이 과제를 수행하면서 Go의 생태계를 탐색하고 다양한 오픈소스 라이브러리와 도구들을 찾아보면서, 오픈소스를 찾고 이해하며 적절하게 활용하는 능력이 중요하다는 것을 깨달았습니다.
## Name
셋째로, 오픈소스 커뮤니티의 가치를 알게 되었습니다.
Choose a self-explaining name for your project.
오픈소스 프로젝트는 많은 개발자들이 참여하고 기여하는 형태로 운영됩니다.
이를 통해 다양한 의견과 아이디어가 교류되며, 버그 수정과 기능 개선이 이루어집니다.
이 과제를 수행하면서 오픈소스 프로젝트에 대한 문서와 커뮤니티를 참고하고, 다른 개발자들의 경험과 지식을 공유받는 과정을 통해 오픈소스 커뮤니티의 가치와 중요성을 더욱 깊이 이해하게 되었습니다.
이러한 커뮤니티에 참여하고 기여함으로써 개발자로서 성장할 수 있을 뿐 아니라 다른 개발자들과 협업하며 더 큰 성과를 이룰 수 있을 것이라 생각하고 추후에도 많은 참여를 하고 싶다는 생각을 하였습니다.
## Description
이 과제를 수행하면서 오픈소스의 이해와 활용에 대한 지식을 확립하고, 오픈소스 커뮤니티의 가치를 알게 되었습니다.
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
이는 제가 추후에 프로젝트를 진행하거나 다른 개발자들과 협업할 때 오픈소스를 더욱 적극적으로 활용할 수 있게끔 도움을 줄 것이라고 생각하고, 그렇기에 뜻깊은 프로젝트였다고 생각합니다.
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.